Im利用InputManager来检查控制的变化是否由用户或代码进行。 除用户使用切割/拷贝/帕斯图时外,该工程课以罚款。 如果用户在文本箱中做剪辑+v,InputManager正确地通知。 然而,如果从文本框的正文中划出历史,那么投稿人就永远不会向专利局或公证局发动火灾。 任何人都知道为什么? 或者如何发现这些用户的行动? 以下是一份工作样本。 在用户使用上述文本框中的切割/拷贝/帕斯特菜单时,从没有发生火灾以来,较低文本栏目从未更新过。
XAML:
<Window x:Class="InputMgrDemo.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<StackPanel>
<TextBox TextChanged="TextBox_TextChanged" />
<TextBlock Name="_text" />
</StackPanel>
</Window>
背后法典:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace InputMgrDemo
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
InputManager.Current.PreNotifyInput += ((sender, e) => _userInput = true);
InputManager.Current.PostNotifyInput += ((sender, args) => _userInput = false);
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (_userInput)
{
_text.Text = (sender as TextBox).Text;
}
}
private bool _userInput;
}
}