WPF技巧大全:[3]效果。。。效果?效果!
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]效果。。。效果?效果!](https://exp-picture.cdn.bcebos.com/2e223d85e036e2911a6b6d54b2723d03baea5bdb.jpg)
2、如果你用Blend,可以在“资产”面板找到“效果”项,然后把效果拖到要应用的对象上即可。其中BlurEffect和DropShadowEffect是在默认命名空间System.Windows.Media.Effects中,剩下的13个在Blend附加的Microsoft.Expression.Media.Effects命名空间中。
![WPF技巧大全:[3]效果。。。效果?效果!](https://exp-picture.cdn.bcebos.com/38332303bbea3e8653cb3ff75cd4483105eb55db.jpg)
3、观察生成的XAML,可以发现这样的标记(以DropShadowEffect为例):
<ObjectName ……>
<ObjectName.Effect>
<DropShadowEffect/>
</ObjectName.Effect>
</ObjectName>
使用VisualStudio的话可以这样使用效果类。怎么样,很简单吧?
4、下面展示了几个常见的效果示例(部分来自WPF Pixel Shader Effects Library)。
![WPF技巧大全:[3]效果。。。效果?效果!](https://exp-picture.cdn.bcebos.com/49701aebf6a75f0fe8a82a5a97324b18502c4cdb.jpg)
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 字节流中引用的注册号相关联。