我在页面上有50个按钮,所以我声明了一个Style,它会声明一个适用于所有按钮的边框和IsPressed行为。
<UserControl.Resources>
<statusModule:BooleanToBackgroundColorConverter x:Key="BooleanToBackgroundColor"/>
<Style x:Key="ValveButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border" Background="Transparent" BorderThickness="1" BorderBrush="Black">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsPressed" Value="True">
<Setter TargetName="border" Property="BorderThickness" Value="3" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
我遇到的问题是EACH按钮背景颜色是通过单独的ViewModel属性控制的,例如
<Button Content="Deflection Gas Valve" Background="{Binding Path=OpenDeflectionGasValve, Converter={StaticResource BooleanToBackgroundColor}, Mode=OneWay}" Style="{StaticResource ValveButtonStyle}"
<Button Content="Purge Gas Valve" Background="{Binding Path=OpenPurgeGasValve, Converter={StaticResource BooleanToBackgroundColor}, Mode=OneWay}" Style="{StaticResource ValveButtonStyle}"
和另一个按钮后台绑定将是一个完全不同的ViewModel属性。
如果我为按钮指定了样式,则上面声明的背景设置无效。
是否可以使用Style for ALL按钮,但为每个按钮声明一个Background值。
答案 0 :(得分:1)
在您的ConroleTemplate
中,您需要通过Background
尊重TextBox
控件的原始TemplateBinding
属性。
所以改变
Background="Transparent"
为:
Background="{TemplateBinding Background}"
现在,后台将受background
TextBox属性中的值的影响。
并且要将默认值设置为背景属性,请通过setter设置样式中的颜色:
<Setter Property="Background" Value="Transparent" />