文本框的Text Changed事件,位于网格的m行和列的边框内



我有一个WPF网格,由代码创建。在网格单元内部,有边界。边框包含包含文本的文本框。

我想根据文本块中的内容更改文本的可见性。如果文本发生更改,可见性也应该随之更改,具体取决于文本的新值。

如何激发Text_Changed事件?我必须安排一个新的活动吗?我应该创建一个rouunted事件还是仅仅创建一个C#事件。

最简单的方法可能是将文本框可见性绑定到文本,并编写一个转换器来检查文本并返回适当的可见性值。这里有一个例子:

转换器:

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 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);

最新更新