分类目录: WPF
Style
Post date:
Author: goddenty
Number of comments: no comments
https://github.com/MahApps/MahApps.Metro
https://github.com/HandyOrg/HandyControl
Style定义:
如果Style没有定义Key,则会自动应用到所有的相关组件上,如果不想应用默认样式的话,应该使用Style=”{x:Null}”
<Style x:Key="BigFontButtonStyle" TargetType="Button">
<Setter Property="FontSize" Value="18"/>
</Style
在Style中设置EventTrigger
需要在代码中实现Handler。
<ListBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding SchoolList}" Margin="10,10">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewMouseMove" Handler="ListBoxItem_PreviewMouseMove" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate >
<Grid helper:GridHelper.Cols="* *">
<TextBlock Grid.Column="0" Text="{Binding Name}" Margin="10,0"/>
<TextBlock Grid.Column="1" Text="{Binding Location}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Triggers
简单Trigger
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value="True">
<Setter Property="Control.ForeGround" Value="DardRed"/>
</Trigger>
</Style.Triggers>
</Style>
EventTrigger
<Style x:Key="BigFontStyle">
<Style.Trigers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryborad>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22" />
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
MultiTrigger & MultiDataTrigger
注意MultiTrigger和MultiDataTrigger的使用区别:
MultiTrigger中只能使用Property和Value来设置条件
而MultiDataTrigger使用Binding和Value来设置条件
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="IsFocused" Value="False"/>
</MultiTrigger.Conditions>
//一个Condition多种Setter
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Opacity" Value="0.9"/>
</MultiDataTrigger.Setters>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Name="bb">
<Storyboard>
<ColorAnimation
Storyboard.TargetName="ellipseFlashUI"
Duration="0:0:0.5"
Storyboard.TargetProperty="(Fill).(SolidColorBrush.Color)"
From="{StaticResource flashColor}" To="White"
AutoReverse="True" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="bb" />
</MultiDataTrigger.ExitActions>
</MultiTrigger>
</Style.Triggers>
</Style>
<MultiTrigger>
<MultiDataTrigger.Conditions>
//绑定属性和值
<Condition Binding="{Binding Path=PuttingFlow}"
Value="{x:Static bo:PuttingFlow.WaitingPut}" />
</MultiDataTrigger.Conditions>
</MultiTrigger>
如果需要在Condition中判断不等于或者大于,小于等情况,则需要通过ValueConverter来转换为bool来实现。
DataTrigger
可以根据不同的DataValue,来设置控件不同的Template
在DataTrigger中可以使用Binding来绑定变量。
<Style TargetType="Button" x:Key="reagentCellStyle">
<Style.Triggers>
<DataTrigger
Binding="{Binding (temphelper:AttachedDPHelper.ControlUseContext), RelativeSource={RelativeSource AncestorType=local:ReagentBayViewControl, Mode=FindAncestor}}"
Value="0">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
//一个Condition多种Setter
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Opacity" Value="0.9"/>
</MultiDataTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiDataTrigger.Conditions>
//绑定属性和值
<Condition Binding="{Binding Path=ReagentPuttingFlow}"
Value="{x:Static bo:ReagentCellPuttingFlow.WaitingPut}" />
</MultiDataTrigger.Conditions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger>
</DataTrigger>
</Style.Triggers>