在UserControl-WPF中单击事件

时间:2010-07-11 08:58:55

标签: wpf

我的WPF应用程序中有一个UserControl。 我想调用click事件并在用户单击UserControl时执行一些操作。 问题是 - UserControl没有点击事件。 我在网上搜索,发现你可以使用MouseLeftButtonUp事件。 我试了一下 - 但它没有回应我的点击。 有任何想法吗? 谢谢!

3 个答案:

答案 0 :(得分:9)

你没有写下你想要做的事情,但如果你需要点击事件,你可能正在编写某种按钮(Button类实际上是“你可以点击的东西”,在控件模板中有可视化表示你可以替代)

  • 如果您需要一个内容复杂的按钮 - 将您的用户控件放在一个按钮
  • 如果您需要一个看起来不像按钮的按钮,请为按钮
  • 编写自定义控件模板
  • 如果您需要一个带有额外功能子类按钮的按钮,请在代码中添加额外的数据/行为,并将显示XAML放在样式中。

答案 1 :(得分:4)

我认为对于您的需求PreviewMouseLeftButtonUp(Down)事件更合适。然后,您需要处理ClickCount以计算点击量,然后提升您自己的事件,其他控件将知道您的控件被点击。处理点击事件的方法还有很多。您应该查看this msdn articlethis

更新以处理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

答案 2 :(得分:2)

为什么不直接使用MouseDown?

将事件放在用户控件中,然后执行以下操作:

private void MyControl_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        MessageBox.Show("Clicked!");
    }
}