【问题标题】:Binding a WPF Style Trigger to a custom dependency property将 WPF 样式触发器绑定到自定义依赖项属性
【发布时间】:2012-07-30 07:47:51
【问题描述】:

我在这里找到了许多类似的主题,但似乎都没有解决我的具体问题。

我需要在某些条件下突出显示文本框的背景。我创建了一个 Highlight 属性并尝试在样式中使用触发器来设置它,但它实际上并没有突出显示文本。

这是我的风格,简化版:

<Style x:Key="TextBoxStyle" BasedOn="{StaticResource CommonStyles}">
    <Style.Triggers>
        <Trigger Property="Elements:DataElement.Highlight" Value="True">
            <Setter Property="Control.Background"
                    Value="{DynamicResource EntryBoxHighlightBackground}"/>
        </Trigger>
    </Style.Triggers>
</Style>

元素定义为:

xmlns:Elements="clr-namespace:MDTCommon.Controls.Forms.Elements">

然后我有应用样式的部分:

<!-- Applies above style to all TextBoxes -->
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxContentHolder}" >
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
    <!-- Overrides the default Error Style -->
</Style>

DataElement 类后面的代码如下:

public static readonly DependencyProperty HighlightProperty = 
    DependencyProperty.Register("Highlight", typeof(bool), typeof(DataElement));

public bool Highlight
{
    get { return (bool)base.GetValue(HighlightProperty); }
    set { base.SetValue(HighlightProperty, value); }
}

最终派生自 UserControl 的 DataElement,它包含对 TextBox 对象以及其他对象的引用。

在包含所有 DataElement 对象的 CustomForm 类中,我有以下设置颜色。

Resources["EntryBoxHighlightBackground"] = Brushes.Yellow;

所以,第一个问题是为 DataElement 设置 Highlight 属性不会导致文本框背景绘制为黄色。

另一个问题是我意识到我正在将这种样式应用于所有文本框,并且我可能在其他区域中拥有实际上不包含在 DataElement 中的文本框,这可能会导致绑定问题。

【问题讨论】:

  • 尝试为你的风格添加一个 setter 'background'
  • 我省略了很多样式以保持简单,并专注于我认为可能存在问题的区域。
  • 只是为了确定:您不应该还为 XAML 中的“元素”指定一个程序集吗?输出窗口是否显示任何错误?

标签: wpf triggers styles dependencies


【解决方案1】:

尝试将您的触发器转换为 DataTrigger,并添加一个直接查看 DataElement 控件的绑定,如下所示:

<DataTrigger Binding="{Binding Path=Highlight, RelativeSource={RelativeSource AncestorType={x:Type Elements:DataElement}}}" Value="True">
    <Setter Property="Control.Background" Value="{DynamicResource EntryBoxHighlightBackground}"/>
</DataTrigger>

【讨论】:

  • 为什么?简单的Trigger 应该支持依赖属性,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多