文本更改了文本框的事件,在网格的行m和列的内部边界内

时间:2014-04-10 20:57:39

标签: c# .net wpf winforms

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

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

如何触发Text_Changed事件?我是否需要为新活动创作?我应该创建一个已安装的事件还是仅仅是一个C#事件。

1 个答案:

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