最简单的方法可能是将文本框的可见性绑定到文本并编写一个转换器来检查文本并返回适当的可见性值。这是一个例子:
转换器:
public class TextToVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string text = value as string;
//Write your condition here
if (text == "foo")
return Visibility.Hidden;
else
return Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
在你添加的资源部分:
<l:TextToVisibilityConverter x:Key="myConverter"/>
然后你像这样设置你的 TextBlock:
<TextBlock Visibility="{Binding Text, RelativeSource={RelativeSource Self}, Converter={StaticResource myConverter}}" .../>
这样,无论您的文本如何更改,都会在转换器内部计算可见性。而且你不需要 TextChanged 事件。
如果您需要在后面的代码中创建绑定,可以编写如下代码:
//Create just one instance of this converter and then reuse for all bindings.
IValueConverter converter = new TextToVisibilityConverter();
//Now you can bind the text and the visibility
Binding myBinding = new Binding("Text");
myBinding.Source = textBlock;
myBinding.Converter = converter;
textBlock.SetBinding(TextBlock.VisibilityProperty, myBinding);