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