WPF文本框触发器清除文本

11

我有许多TextBox控件,我正在尝试编写一个样式,当控件被禁用时,清除文本属性。

我不想在后台代码中使用事件处理程序。

我写了这个:

<Style TargetType="{x:Type TextBox}">                            
 <Style.Triggers>
  <Trigger Property="IsEnabled" Value="False">                                    
   <Setter Property="Text" Value="{x:Null}" />
  </Trigger>                                
 </Style.Triggers>
</Style>

问题在于,如果TextBox被定义为:

<TextBox Text={Binding Whatever} />

如果触发器没有起作用(可能是因为它被绑定了),如何解决这个问题?

1个回答

19
因为你在文本框中显式地设置了文本,样式触发器无法覆盖它。试试这个:
因为您在TextBox中显式设置了Text,所以样式触发器无法覆盖它。请尝试以下方法:
<TextBox>
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding Whatever}" />

            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Text" Value="{x:Null}" /> 
                </Trigger>
            </Style.Triggers>
        </Style> 
    </TextBox.Style>
</TextBox>

我只是想问一下,如果我想将这个添加到控件的资源中作为样式(这样我就不必重复100次),是否可以使用类似TemplateBinding的东西实现,还是我必须编写一个继承自TextBox的自定义控件,并在默认模板中指定此样式与TemplateBinding? - theSpyCry
只需在窗口资源部分定义样式并为其指定x:Key。然后,您可以使用StaticResource引用它。在Google上查找“WPF样式”-有很多优秀的文章。 - Matt Hamilton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接