WPF技巧大全:[3]效果。。。效果?效果!

2025-10-13 10:16:34

1、先搭建一个你要的用户界面。

下面是一个简单示例:(布局信息省略)

<Grid x:Name="LayoutRoot">

<Grid ……>

<Grid.Background>

<ImageBrush ImageSource="pack://siteoforigin:,,,/Background.png" Stretch="UniformToFill"/>

</Grid.Background>

<Label Content="Label" Background="Red"……/>

<Button Content="Button"……/>

<CheckBox Content="CheckBox" IsChecked="True"……/>

<ComboBox  IsEditable="True" Text="ComboBox"……/>

<GroupBox Header="GroupBox" >

<TreeView >

<TreeViewItem Header="Root" IsExpanded="True">

<TreeViewItem Header="Node" IsExpanded="True">

<TreeViewItem Header="Node" IsExpanded="True">

<BulletDecorator>

<BulletDecorator.Bullet>

<CheckBox/>

</BulletDecorator.Bullet>

<Button>Item</Button>

</BulletDecorator>

</TreeViewItem>

</TreeViewItem>

</TreeViewItem>

<TreeViewItem Header="Root" >

<TreeViewItem Header="Root" >

</TreeViewItem>

</TreeViewItem>

</TreeView>

</GroupBox>

<ProgressBar Value="50"……/>

<RadioButton Content="RadioButton" IsChecked="True"……/>

<TextBox  Text="TextBox" ……/>

<Slider ……/>

<Rectangle  Stroke="Black" ……>

<Rectangle.Fill>

<LinearGradientBrush EndPoint="0,0.5" StartPoint="1,0.5">

<GradientStop Color="Blue" Offset="1"/>

<GradientStop Color="Red"/>

<GradientStop Color="Lime" Offset="0.5"/>

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

<Image Source="Warning.png"……/>

</Grid>

</Grid>

WPF技巧大全:[3]效果。。。效果?效果!

2、如果你用Blend,可以在“资产”面板找到“效果”项,然后把效果拖到要应用的对象上即可。其中BlurEffect和DropShadowEffect是在默认命名空间System.Windows.Media.Effects中,剩下的13个在Blend附加的Microsoft.Expression.Media.Effects命名空间中。

WPF技巧大全:[3]效果。。。效果?效果!

3、观察生成的XAML,可以发现这样的标记(以DropShadowEffect为例):

<ObjectName ……>

<ObjectName.Effect>

    <DropShadowEffect/>

</ObjectName.Effect>

</ObjectName>

使用VisualStudio的话可以这样使用效果类。怎么样,很简单吧?

4、下面展示了几个常见的效果示例(部分来自WPF Pixel Shader Effects Library)。

WPF技巧大全:[3]效果。。。效果?效果!

1、Effect 类提供自定义位图效果,当然也支持矢量图。

所有的UIElement都有Effect属性,所有的Visual都有VisualEffect属性。

2、Effect 类支持硬件加速,并且根据GPU性能或配置自动选择软件或硬件渲染。

3、要创建自定义的位图效果,需要继承 ShaderEffect 类以实现基于单个像素着色的自定义效果。ShaderEffect 类不是用程序代码完成,而是使用像素着色器。像素着色器用HLSL (High Level Shader Language,高级着色语言 )编写,原先供DirectX用来渲染3D表面。

4、方法:

1.从预编译的高级着色语言 (HLSL) 字节流或文件(.ps)加载一个 PixelShader。

2.定义表示效果参数和基于 Brush 的画面输入的依赖项属性。 使用 RegisterPixelShaderSamplerProperty的重载之一将这些输入与在 HLSL 字节流中引用的注册号相关联。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢