设置取自现有 属性 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>
我正在研究 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>