Wpf 如何在xaml中将ControlTemplate.Triggers与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

我是WPF的新手。我需要将这个xaml代码与ControlTemplate分开。 这是我的原始代码

<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来处理图像。