'文本'无法通过属性触发器设置属性并同时显示在触发条件中

时间:2017-07-20 02:16:03

标签: c# wpf xaml mvvm wpf-style

我想替换文字" 0"用""使用触发器..但得到以下编译错误。

'文本'属性不能从属性触发器设置,并且同时出现在触发器的条件中。

<TextBox MaxLength="10">
    <TextBox.Style TargetType="{x:Type TextBox}" x:Key="d1">
        <Style.Triggers>
            <Trigger Property="Text" Value="0">
                <Setter Property="Text" Value="" />
            </Trigger>
        </Style.Triggers>
    </TextBox.Style>
</TextBox>

1 个答案:

答案 0 :(得分:2)

正如错误消息明确告诉您的那样,您无法执行此操作。这与你触发的属性相同。

一些选项包括:

  • 如果TextBox绑定到源属性,则可以使用转换器转换字符串&#34; 0&#34;到string.Emptyhttps://www.codeproject.com/Tips/868163/IValueConverter-Example-and-Usage-in-WPF

  • 如果Text属性绑定到string属性,则只需返回string.Empty而不是&#34; 0&#34;从这一个。

  • 如果是int属性,您可以将其类型更改为int?并返回null而不是0

  • 如果Text属性不受数据限制,您可以处理TextChanged事件,如下所示:

    private bool _handle = true;
    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (_handle)
        {
            _handle = false;
            TextBox textBox = sender as TextBox;
            if (textBox.Text == "0")
                textBox.Text = string.Empty;
            _handle = true;
        }
    }
    

所以你有很多选择,但使用触发器不是其中之一。