Wpf 如何在xaml中将ControlTemplate.Triggers与ControlTemplate分离
我是WPF的新手。我需要将这个xaml代码与ControlTemplate分开。 这是我的原始代码Wpf 如何在xaml中将ControlTemplate.Triggers与ControlTemplate分离,wpf,xaml,Wpf,Xaml,我是WPF的新手。我需要将这个xaml代码与ControlTemplate分开。 这是我的原始代码 <ControlTemplate x:Key="AddImgBtnTemplate" TargetType="Button" > <Grid> <Border Name="border" Height="25" Width="25"/> <Image Name="Normal" Source="/UILibrary;component/T
<ControlTemplate x:Key="AddImgBtnTemplate" TargetType="Button" >
<Grid>
<Border Name="border" Height="25" Width="25"/>
<Image Name="Normal" Source="/UILibrary;component/Themes/Default/Images/Add.png" Height="18" Width="18"/>
<Image Name="Pressed" Source="/UILibrary;component/Themes/Default/Images/Add.png" Opacity="0.7" Visibility="Hidden" Height="18" Width="18"/>
<Image Name="Disabled" Source="/UILibrary;component/Themes/Default/Images/Add.png" Opacity="0.3" Visibility="Hidden" Height="18" Width="18"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Disabled" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="CornerRadius" Value="3" />
<Setter TargetName="border" Property="BorderThickness" Value="1" />
<Setter TargetName="border" Property="BorderBrush" Value="#FF948A54" />
</Trigger>
</ControlTemplate.Triggers>
需要将此代码分离。此代码是重复代码,只需定义一个即可
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Disabled" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="CornerRadius" Value="3" />
<Setter TargetName="border" Property="BorderThickness" Value="1" />
<Setter TargetName="border" Property="BorderBrush" Value="#FF948A54" />
</Trigger>
</ControlTemplate.Triggers>
您可以将带有触发器的代码放入
样式中,如下所示
<Style x:Key="myButton" TargetType="Button">
<Style.Triggers>
</Style.Triggers>
</Style>
您可以将带有触发器的代码放入样式中,如下所示
<Style x:Key="myButton" TargetType="Button">
<Style.Triggers>
</Style.Triggers>
</Style>
但是不能在样式设置器上设置TargetName属性。是的,你说得对,我错过了。你能解释一下分开这段代码的原因吗?我希望这有助于找到解决方案。#bars222:原因是我有很多ControlTemplate,它们与所有ControlTemplate相同,因此我们需要避免重复代码。因此,如果所有这些ControlTemplate仅与图像不同,我建议您可以尝试对图像使用一个带有一些绑定的ControlTemplate。但不能使用TargetName属性设定一个风格设定者。是的,你说得对,我错过了。你能解释一下分开这段代码的原因吗?我希望这有助于找到解决方案。#bars222:原因是我有很多ControlTemplate,它们与所有ControlTemplate相同,因此我们需要避免重复代码。因此,如果所有这些ControlTemplate仅与图像不同,我建议您可以尝试使用一个带有一些绑定的ControlTemplate来处理图像。