我有一个由代码创建的WPF网格。在网格单元内部,有边框。边框包含带文本的文本框。
我想根据文本内容的内容更改Textblock中文本的可见性。 如果文本发生更改,则可见性也应更改,具体取决于文本的新值。
如何触发Text_Changed事件?我是否需要为新活动创作?我应该创建一个已安装的事件还是仅仅是一个C#事件。
答案 0 :(得分:0)
最简单的方法可能是将文本框可见性绑定到文本,并编写一个转换器来检查文本并返回适当的可见性值。这是一个例子:
转换器:
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);