在WPF开发界面的过程中,经常会遇到多个相同种类的控件样式也是统一的,但是要一个一个地去设置,即使是复制粘贴都嫌累,所以翻了些书,网上度娘了一些材料,发现WPF有很容易的方式解决我的纠结,那就是——自定义样式。
我使用的比较多的是在Grid里使用Grid.Resource标签将样式作为静态资源统一管理起来,然后在需要的地方使用。
1 <Grid.Resources> 2 <Style x:Key="Style_Label" TargetType="Label"> 3 <Setter Property="HorizontalAlignment" Value="Left"/> 4 <Setter Property="VerticalContentAlignment" Value="Center"/> 5 </Style> 6 7 <Style x:Key="Style_Label_Bold" TargetType="Label"> 8 <Setter Property="HorizontalAlignment" Value="Left"/> 9 <Setter Property="VerticalContentAlignment" Value="Center"/> 10 <Setter Property="FontWeight" Value="Bold"/> 11 </Style> 12 13 <Style x:Key="Style_Button" TargetType="Button"> 14 <Setter Property="Height" Value="40"/> 15 <Setter Property="Width" Value="80"/> 16 <Setter Property="HorizontalAlignment" Value="Left"/> 17 <Setter Property="Background" Value="#FF00AAFF"/> 18 <Setter Property="Foreground" Value="White"/> 19 <Setter Property="BorderBrush" Value="{x:Null}"/> 20 <Setter Property="Focusable" Value="False"/> 21 </Style> 22 23 <Style x:Key="Style_TextBox" TargetType="TextBox"> 24 <Setter Property="Height" Value="30"/> 25 <Setter Property="HorizontalAlignment" Value="Left"/> 26 <Setter Property="VerticalContentAlignment" Value="Center"/> 27 </Style> 28 29 <VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left"> 30 <VisualBrush.Visual> 31 <TextBlock FontStyle="Italic" Text="必填项,免单或修改价格原因"/> 32 </VisualBrush.Visual> 33 </VisualBrush> 34 35 <Style x:Key="Style_TextBox_Tooltip" TargetType="TextBox"> 36 <Setter Property="Height" Value="30"/> 37 <Setter Property="HorizontalAlignment" Value="Left"/> 38 <Setter Property="VerticalContentAlignment" Value="Center"/> 39 <Style.Triggers> 40 <Trigger Property="Text" Value="{x:Null}"> 41 <Setter Property="Background" Value="{StaticResource HelpBrush}"/> 42 </Trigger> 43 <Trigger Property="Text" Value=""> 44 <Setter Property="Background" Value="{StaticResource HelpBrush}"/> 45 </Trigger> 46 </Style.Triggers> 47 </Style> 48 </Grid.Resources>
现在遇到的问题是,我的Button的样式,并不能真的去掉外边框,需要更深一步才行。
当然还有TextBox的空内容提示,还在研究,不了解visualBrush的用法,算是移山填海地手法从巨人们的肩膀上得来的,多实践才会理解代码的含义。
说实话,Trigger(触发器)要比事件更方便一些,发现了比winform好用的地方了,果然WPF是革新的技术啊!