【发布时间】:2010-07-11 08:58:54
【问题描述】:
我的 WPF 应用程序中有一个 UserControl。
我想在用户单击 UserControl 时调用单击事件并执行一些操作。
问题是 - UserControl 没有点击事件。
我在网上搜索,发现可以使用 MouseLeftButtonUp 事件。
我试过了,但它没有响应我的点击。
【问题讨论】:
标签: wpf
我的 WPF 应用程序中有一个 UserControl。
我想在用户单击 UserControl 时调用单击事件并执行一些操作。
问题是 - UserControl 没有点击事件。
我在网上搜索,发现可以使用 MouseLeftButtonUp 事件。
我试过了,但它没有响应我的点击。
【问题讨论】:
标签: wpf
您没有编写您想要执行的操作,但如果您需要点击事件,也许您正在编写某种按钮(Button 类实际上是“您可以点击的东西”,您可以在控件模板中使用可视化表示可以替换)
【讨论】:
我认为对于您的需求 PreviewMouseLeftButtonUp(Down) 事件更合适。然后你需要处理 ClickCount 来计算点击次数,然后引发你自己的事件,其他控件会知道你的控件被点击了。还有更多处理点击事件的方法。你应该看看this msdn article和this
更新处理 Click 和 DoubleClick
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
_myCustomUserControl.MouseLeftButtonUp += new MouseButtonEventHandler(_myCustomUserControl_MouseLeftButtonUp);
_myCustomUserControl.MouseDoubleClick += new MouseButtonEventHandler(_myCustomUserControl_MouseDoubleClick);
}
bool _doubleClicked;
void _myCustomUserControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
_textBlock.Text = "Mouse left button clicked twice";
_doubleClicked = true;
e.Handled = true;
}
void _myCustomUserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_doubleClicked)
{
_doubleClicked = false;
return;
}
_textBlock.Text = "Mouse left button clicked once";
e.Handled = true;
}
}
要测试此示例,请将您的控件命名为 _myCustomUserControl,并将名为 _textBlock 的 TextBlock 添加到您的 MainWindow.xaml
【讨论】:
为什么不直接使用 MouseDown?
将事件放在用户控件中并简单地执行以下操作:
private void MyControl_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
MessageBox.Show("Clicked!");
}
}
【讨论】: