Skip to content
分类目录:

Style

Post date:
Author:
Number of comments: no comments

https://github.com/MahApps/MahApps.Metro

https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/tree/master/MaterialDesignThemes.Wpf

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>
  

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

豫ICP备2021008859号-1