确定。这似乎是一个令人难以置信的基本用例,但出于某些原因,我遇到了跨控件类型寻找通用解决方案的问题。
继承用例:
使用任何可编辑的控件向用户呈现表单。 (文本框,组合,网格等)。
用户在控件中编辑一个值并标签输出。
期望是我可以连接到像迷失焦点这样的事件,并用改变的值做“foo”。
然后,用户将焦点返回到控件并标签,而不进行编辑。 期望无论我联系到哪个事件,我都可以检查价值是否已经改变。
是否有一个跨控件的常见事件只会在用户完成编辑时触发(例如Tab out或enter)并允许我检查以前的状态与当前状态?
答案 0 :(得分:1)
Jason,您可能希望在WPF中查看Binding和DependencyProperties,而不是跟踪表单中的事件。您可以将类绑定到表单,该表单公开要更改的属性。使用DependancyProperties会触发一个名为“PropertyChanged”的事件。
不幸的是,这是一个广泛的主题,但您将真正获得WPF编程模型的全部好处。搜索“wpf中的依赖属性”将为您提供一些很好的例子。
答案 1 :(得分:0)
我想也许这就是焦点问题。存在两种不同的焦点类型:键盘焦点和逻辑焦点。具有键盘焦点的控件是具有插入符号的控件,用户按下键和输入的控制过程。控件可以具有逻辑焦点但不具有键盘焦点。请在MSDN文章“输入概述”中查看此内容。关于另一个问题,也许您可以处理TabControl.SelectedItemChanged以在选项卡项选择更改时获取事件。 希望这对你有帮助......
答案 2 :(得分:0)
您可能感兴趣的是实现INotifyPropertyChanging(而不仅仅是INotifyPropertyChanged)。
As noted in the answer of this question,INotifyPropertyChang ING 不会阻止您更改值,而是会检测何时更改某些内容以及它的新值将是什么。
希望它有助于您的解决方案需求。
答案 3 :(得分:0)
正如前面的答案所建议的那样,通过实现一个view-viewmodel结构,你的视图模型已经实现了INotifyPropertyChanged,从而允许你绑定到将宣告他们对UI的更改的属性,你会更好。
如果您不想这样做,您最终可以将输入元素订阅到PreviewKeyUp事件,检查是否已按下Tab键并从那里继续。