【问题标题】:TemplatedParent Binding in ControlTemplate.TriggersControlTemplate.Triggers 中的 TemplatedParent 绑定
【发布时间】:2010-01-13 15:32:28
【问题描述】:

当其文本为空时,我尝试使用 ControlTemplate 中的触发器将自定义控件的背景设置为可视画笔。相关代码如下:

<ControlTemplate.Triggers>
  <Trigger Property="Text" Value="">
    <Setter TargetName="MyBorder" Property="Background">
      <Setter.Value>
        <VisualBrush Opacity="0.4" Stretch="None" TileMode="None">
          <VisualBrush.Visual>
            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BackgroundText}" />
          </VisualBrush.Visual>
        </VisualBrush>
      </Setter.Value>
    </Setter>
  </Trigger>
</ControlTemplate.Triggers>

但是,当文本为空时,不会应用视觉画笔。但是,如果我在代码中创建可视画笔并将其作为依赖属性公开,则以下代码 确实 起作用:

<ControlTemplate.Triggers>
  <Trigger Property="Text" Value="">
    <Setter TargetName="MyBorder" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BackgroundBrush}" />
    </Setter>
  </Trigger>
</ControlTemplate.Triggers>

不过,我宁愿在 XAML 中定义画笔。为什么第二个绑定可以正常工作,而第一个却不行?

【问题讨论】:

    标签: c# wpf xaml triggers controltemplate


    【解决方案1】:

    您是否要创建水印文本框?如果是这样,我通过将 TextBlock 添加到自定义控件来创建我的,然后在触发器定义中引用它。当 TextBox 没有焦点,并且控件中没有文本时,水印(TextBlock)将可见。一旦 TexBox 获得焦点,水印将被隐藏。然后,水印的文本将绑定到您的 BackgroundText 属性。

    <ControlTemplate.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsFocused" Value="false"/>
                <Condition Property="Text" Value="{x:Null}"/>
            </MultiTrigger.Conditions>
            <Setter TargetName="Watermark" Property="Visibility" Value="Visible"/>
        </MultiTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsFocused" Value="false"/>
                <Condition Property="Text" Value=""/>
            </MultiTrigger.Conditions>
            <Setter TargetName="Watermark" Property="Visibility" Value="Visible"/>
        </MultiTrigger>
    </ControlTemplate.Triggers>
    

    【讨论】:

    • 感谢您的回答,布伦特。是的,这就是我想要完成的,我已经看到了一种与你类似的方法。然而,我真正想要找到的答案是为什么绑定的行为会在两个场景之间发生变化,而不是如何完成这个特定的任务。抱歉,如果不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多