C# ';文本';属性不能从属性触发器设置并显示在触发器';同时,它的状况如何
我想使用触发器将文本“0”替换为“”。。但是得到下面的编译错误 无法从属性触发器设置“Text”属性,并同时显示在触发器的条件中C# ';文本';属性不能从属性触发器设置并显示在触发器';同时,它的状况如何,c#,wpf,xaml,mvvm,wpf-style,C#,Wpf,Xaml,Mvvm,Wpf Style,我想使用触发器将文本“0”替换为“”。。但是得到下面的编译错误 无法从属性触发器设置“Text”属性,并同时显示在触发器的条件中 <TextBox MaxLength="10"> <TextBox.Style TargetType="{x:Type TextBox}" x:Key="d1"> <Style.Triggers> <Trigger Property="Text" Value="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>
错误消息清楚地告诉您,您不能这样做。设置的属性与触发的属性相同 一些选择包括:
- 如果
绑定到源属性,则可以使用转换器将字符串“0”转换为文本框
:字符串。空
- 如果
属性绑定到Text
属性,则只需返回string
,而不是从该属性返回“0”string.Empty
- 如果它是
属性,则可以将其类型更改为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; } }
因此,您有很多选择,但使用触发器不是其中之一。错误消息清楚地告诉您,您不能这样做。设置的属性与触发的属性相同 一些选择包括:
- 如果
绑定到源属性,则可以使用转换器将字符串“0”转换为文本框
:字符串。空
- 如果
属性绑定到Text
属性,则只需返回string
,而不是从该属性返回“0”string.Empty
- 如果它是
属性,则可以将其类型更改为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; } }
因此,您有很多选择,但使用触发器不是其中之一。错误消息对我来说非常清楚,而且合理。WPF不希望您设置一个无限循环,在这种情况下可能会发生这种情况。一旦触发器不再应用(因为setter更改了值),WPF将恢复到绑定值,假设存在一个绑定值,这可能会再次触发触发器,从而导致触发器不再应用,依此类推。在你的问题中没有足够的上下文来了解更广泛的目标是什么,但很明显你只是在错误地思考你的问题。解决这个问题,确保包括一个好的和更好的解释。错误信息对我来说似乎非常清楚,合理。WPF不希望您设置一个无限循环,在这种情况下可能会发生这种情况。一旦触发器不再应用(因为setter更改了值),WPF将恢复到绑定值,假设存在一个绑定值,这可能会再次触发触发器,从而导致触发器不再应用,依此类推。在你的问题中没有足够的上下文来了解更广泛的目标是什么,但很明显你只是在错误地思考你的问题。解决问题,确保包括一个好的,并更好地解释。