【问题标题】:Specify a binding in an application-level style resource?在应用程序级样式资源中指定绑定?
【发布时间】:2012-04-10 15:02:27
【问题描述】:

我是 WPF 的新手,我创建了一种样式来改变按钮控件的外观。该样式包含一个数据触发器,用于根据数据上下文中的布尔属性更改按钮背景(以及其他内容),例如:-

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

目前该样式仅由单个按钮使用,因此数据触发器绑定使用名为“ValveIsOpen”的属性进行硬编码。 我现在想在我的应用程序中重复使用这种风格,不同的按钮绑定到不同的属性。如何更改应用样式的每个按钮上的数据触发器绑定?

非常感谢

【问题讨论】:

    标签: wpf


    【解决方案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..
    

    【讨论】:

    • 一个窗口上可能有很多这样的按钮。用用户控件而不是样式来完成我想要的东西是否可行?如果是这样,我将如何通过用户控件上的属性公开/设置数据触发器的绑定表达式?还是我找错树了?!
    • 您可以创建一个从 Button 派生的自定义控件,该控件具有两个依赖属性,例如“bool IsActive”和“SolidColorBrush IsActiveColor”。然后绑定 等。当 IsActive 更改时,您将在依赖项属性更改处理程序中更新 BackgroundColor。
    • 或者您可以在视图模型上公开 ValveIsOpenColor 并将背景绑定到它。
    • 这很有用,因为我仍在努力了解 WPF!除了更改背景颜色之外,还有更多内容,因为我们还必须在按钮“关闭”时在按钮上画一个十字(用于工业控制 UI)。考虑到这一点,并且它需要可点击,我现在想知道复选框是否更适合,因为它本质上是一个表示开/关状态的控件。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多