Wpf 更改模板
我有一个togglebutton,我想在选中和未选中状态下使用两个不同的模板 单击ToggleButton(IsChecked=True)时,我想使用模板1,第二次单击时,我想使用模板2 就这样Wpf 更改模板,wpf,templates,Wpf,Templates,我有一个togglebutton,我想在选中和未选中状态下使用两个不同的模板 单击ToggleButton(IsChecked=True)时,我想使用模板1,第二次单击时,我想使用模板2 就这样 我该怎么做??我应该使用事件触发器还是触发器?您可以通过样式指定模板,而不是直接指定给元素,从而更改元素上的模板。在我们的风格中,我们可以指定当ToggleButton的IsChecked属性设置为True/False时触发的触发器,然后在该触发器中我们可以更改指定的模板。切换按钮的示例样式如下所示:
我该怎么做??我应该使用事件触发器还是触发器?您可以通过样式指定模板,而不是直接指定给元素,从而更改元素上的模板。在我们的风格中,我们可以指定当ToggleButton的IsChecked属性设置为True/False时触发的触发器,然后在该触发器中我们可以更改指定的模板。切换按钮的示例样式如下所示:
<ToggleButton Content="Toggle Me">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Template"
Value="{StaticResource ToggleButtonUncheckedTemplate}" />
<Style.Triggers>
<Trigger Property="IsChecked"
Value="True">
<Setter Property="Template"
Value="{StaticResource ToggleButtonCheckedTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
这两个StaticResource是我们预定义的ControlTemplates。虽然这样做有效,但我建议只在模板内部进行所需的修改,而不是将ControlTemplate完全替换为另一个模板
就像我们在样式中所做的那样,我们可以在ControlTemplate中创建一个触发器来更改所需的内容:
<ControlTemplate x:Key="ToggleButtonUncheckedTemplate"
TargetType="{x:Type ToggleButton}">
<Grid SnapsToDevicePixels="False"
Background="Transparent">
... layout ...
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked"
Value="true">
<Setter Property="Data"
TargetName="arrow"
Value="M 1,4 L 4,1 L 7,4" />
</Trigger>
<Trigger Property="IsMouseOver"
Value="true">
<Setter Property="Stroke"
TargetName="circle"
Value="#666" />
<Setter Property="Stroke"
TargetName="arrow"
Value="#222" />
<Setter Property="Visibility"
TargetName="shadow"
Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
... 布局。。。