【问题标题】:Text Changed event of the textbox, inside border at row m and column of a grid文本框的文本更改事件,在网格的行 m 和列的边框内
【发布时间】:2014-04-10 20:57:39
【问题描述】:

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

我想根据文本块的内容更改文本块中文本的可见性。 如果文本改变,可见性也应该改变,这取决于文本的新值。

如何触发 Text_Changed 事件?我必须创建一个新事件吗?我应该创建一个 rounded 事件还是只是一个 C# 事件。

【问题讨论】:

  • 为什么是 winforms 和 VB.net 标签?
  • @threeFourOneSixOneThree 因为这个 wpf 窗口是由 windows 窗体主机托管的。 VB.NET 因为,我可以把它翻译成 C#。
  • 你说的是文本框的可见性还是文本框内文本的可见性?
  • @Didier 无论是文本块还是文本的可见性都无关紧要。我会隐藏它而不是折叠它。哦顺便说一句对不起错字。它是一个文本块而不是文本框。

标签: c# .net wpf winforms


【解决方案1】:

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

转换器:

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

【讨论】:

  • 文本变化时如何显示文本的新值?我需要一个像文本这样的事件)改变。 Text_changed 不可用。
  • 您的文本未绑定到虚拟机?
  • 我添加了一些代码来说明我在说什么。
  • 我收到一个错误,尝试创建 Binding 类的实例时无法创建抽象类或接口的实例。
  • 您可能使用的绑定是 System.ServiceModel.Channels.Binding(不是 WPF bingind),您应该使用 System.Windows.Data.Binding。这是 MSDN 链接msdn.microsoft.com/en-us/library/ms742863(v=vs.100).aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多