3

当其文本为空时,我正在尝试使用 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 中定义画笔。为什么第二个绑定可以正常工作,但第一个不能正常工作?

4

1 回答 1

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>
于 2010-01-13T17:06:54.727 回答