设置取自现有 属性 WPF ControlTemplate 的 属性 值

Set a property value took from existing property WPF ControlTemplate

我正在研究 WPF ControlTemplates。 我想说的是,每当在我的按钮上触发 mouserover 事件时,它们的背景颜色就会变成它们的 borderBrush 颜色。

 <Style TargetType="Button">
     <Setter Property="Cursor" Value="Hand"/>
     <Setter Property="Background" Value="White"/>
     <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="Button">
                 <Grid>
                     <Border x:Name="Border" CornerRadius="6" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                         <TextBlock x:Name="ContentBlock" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" VerticalAlignment="Center"  HorizontalAlignment="Center"></TextBlock>
                     </Border>
                 </Grid>
                 <ControlTemplate.Triggers>
                     <Trigger Property="IsEnabled" Value="false">
                         <Setter TargetName="Border" Property="BorderBrush" Value="Gray"></Setter>
                         <Setter TargetName="ContentBlock" Property="Foreground"  Value="Gray"></Setter>
                     </Trigger>
                     <Trigger Property="IsMouseOver" Value="true">
                         <!--<Setter TargetName="Border" Property="Background" Value="Border.BorderBrush"></Setter>-->
                     </Trigger>
                 </ControlTemplate.Triggers>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>

在下一行中,我尝试从我的 Button 中获取 borderBrush。但我不能这样做:

 <!--<Setter TargetName="Border" Property="Background" Value="Border.BorderBrush"></Setter>-->

您可以创建 Binding 并将 RelativeSource 设置为 Border 本身,这允许您绑定到 Border 自己的 BorderBrush 属性:

<Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />

我认为在触发器中设置参考值不是简单的解决方案。 如果你用颜色设置值,你为背景设置的方式,这会是一个问题吗?

    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Border" 
     Property="BorderBrush" Value="Gray"></Setter>
                            <Setter TargetName="ContentBlock" 
    Property="Foreground"  Value="Gray"></Setter>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="Border" 
    Property="Background" Value="Gray" />
                        </Trigger>
                    </ControlTemplate.Triggers>