WPF按钮...有没有办法与样式声明

时间:2017-06-15 22:38:18

标签: c# wpf xaml

我在页面上有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值。

1 个答案:

答案 0 :(得分:1)

在您的ConroleTemplate中,您需要通过Background尊重TextBox控件的原始TemplateBinding属性。

表示模板中未提及的每个TextBox属性(外观)

所以改变

Background="Transparent"

为:

Background="{TemplateBinding Background}"

现在,后台将受background TextBox属性中的值的影响。 并且要将默认值设置为背景属性,请通过setter设置样式中的颜色:

<Setter Property="Background" Value="Transparent" />