【问题标题】:Event Handler located in different class than MainWindow事件处理程序位于与 MainWindow 不同的类中
【发布时间】:2011-11-05 16:38:18
【问题描述】:

所以我按照以下网站上的指南来限制文本框可以接受的字符。

http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a-textbox-in-csharp/

我的问题是我不知道如何在辅助类中触发事件处理程序。基本上,我如何告诉 VS 在该类而不是 MainWindow 中查找事件处理程序代码?我尝试搜索,但显然不知道要使用的正确术语。我使用的 xaml 参考是

xmlns:DigitBox="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"

有什么想法吗?

【问题讨论】:

  • 显示用于将控件添加到 WindowUserControl 的标记,包括事件注册。

标签: c# wpf event-handling partial-classes


【解决方案1】:

我发现的最简单的方法是在构造函数中分配事件。

public MainWindow()
    {
        InitializeComponent();
        TextBoxCurrency.GotFocus += expandedTextBoxEvents.TextBoxCurrencyGotFocus;
        TextBoxCurrency.LostFocus += expandedTextBoxEvents.TextBoxCurrencyLostFocus;
    }

我已经在 XAML 中搜索了一种方法,但没有找到一种简单而干净的方法。

【讨论】:

  • 为了完成答案,可以将窗口对象传递给构造函数以访问组件。 new TextBoxCurrency(this);
【解决方案2】:

使用命令和命令绑定会更好。我不确定将绑定到文本框以实现所需功能的特定命令,但 WPF 的目标之一是减少在代码中使用事件处理程序。

查看this article 了解命令概述,查看this article 了解将命令与事件挂钩的方法。 WPF 命令是实现 UI 和业务逻辑之间真正分离关注点的最酷的功能之一。

作为最坏情况的解决方案,您可以创建自己的文本框,该文本框继承自文本框控件并连接该类中的事件。然后你的控件就可以重用了。

【讨论】:

  • 文本框确实继承自常规文本框控件...我只是不知道如何让 wpf 这样做:)。它一直试图让它使用普通的文本框
  • 您是否像普通文本框一样添加它?您应该明确添加它:在您的窗口定义中添加如下内容:xmlns:inh="clr-namespace:MyNamespace.InheritedControls" 然后在添加文本框时添加如下内容:
  • 好的,我回家后试试。在该文本框 xaml 行中,我是否修改了标准事件调用,或者双击特定事件会自动将事件处理程序添加到 DigitText 类而不是 MainWindow 类?
  • 如果事件是自定义事件,您可能必须将其设为依赖属性。如果没有,它应该适合你。
  • 其实这两个地方都可以处理事件。只要你正确使用控件并且不标记e.Handled = true。
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2016-09-06
相关资源
最近更新 更多