ControlTemplate.Triggers中的TemplatedParent绑定

时间:2010-01-13 15:32:29

标签: c# wpf xaml triggers controltemplate

当文本为空时,我试图使用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中定义画笔。为什么第二个绑定工作正常而不是第一个?

1 个答案:

答案 0 :(得分:1)

您是否尝试创建水印TextBox?如果是这样,我通过向自定义控件添加TextBlock来创建我的,然后在Trigger定义中引用它。当TextBox没有焦点,并且控件中没有文本时,Watermark(TextBlock)将可见。一旦TexBox具有焦点,水印将被隐藏。然后,Watermark的文本将绑定到您的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>