2012-04-10 56 views
0

我对WPF相当陌生,并且创建了一个样式来改变按钮控件的外观。该样式包含基于数据上下文的布尔属性,例如数据触发更改按钮背景(除其他事项外): -在应用程序级样式资源中指定绑定?

<Style x:Key="IndicatorButton" TargetType="Button"> 
    <DataTrigger Binding="{Binding Path=ValveIsOpen}" Value="True"> 
     <Setter Property="Background" Value="#00FF00"/> 
     ..etc.. 

目前的风格只由一个按钮,所以数据触发器绑定使用名为“ValveIsOpen”的属性进行硬编码。 我现在想要在整个应用中重新使用这种风格,并将不同的按钮绑定到不同的属性。我将如何更改样式应用于每个按钮上的数据触发器绑定?

非常感谢

回答

1

您需要定义一个基本样式和衍生风格,如

<Style x:Key="IndicatorButton" TargetType="Button"> 
    <Setter Property="Foreground" .../> 
    ... 

<Style x:Key="ValveIndicatorButton" TargetType="Button" BasedOn={StaticResource IndicatorButton}> 
    <DataTrigger Binding="{Binding Path=ValveIsOpen}" Value="True"> 
     <Setter Property="Background" Value="#00FF00"/> 
     ..etc.. 
+0

有可能是很多在窗口上这些按钮。用用户控件而不是样式完成我想要的是否可行?如果是这样,我将如何通过用户控件上的属性公开/设置数据触发器的绑定表达式?还是我吠叫错了树? – 2012-04-10 15:34:23

+0

您可以使用两个依赖属性创建一个从Button派生的自定义控件,比如'bool IsActive'和'SolidColorBrush IsActiveColor'。然后绑定等。当IsActive更改时,您将更新依赖项属性更改处理程序中的BackgroundColor。 – Phil 2012-04-10 15:58:56

+0

或者您可以在您的视图模型上公开一个ValveIsOpenColor,并将Background绑定到该模型上。 – Phil 2012-04-10 16:07:01