代码之家  ›  专栏  ›  技术社区  ›  amitairos

在UserControl-WPF中单击事件

wpf
  •  6
  • amitairos  · 技术社区  · 16 年前

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

    3 回复  |  直到 5 年前
        1
  •  9
  •   Nir    16 年前

    你没有写你想要做的,但是如果你需要一个点击事件,也许你正在写某种按钮(按钮类实际上是“你可以点击的东西”,在一个控件模板中你可以替换它)

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

    我认为预览鼠标左键nup(Down)事件更适合您的需要。然后您需要处理ClickCount来计算单击的数量,然后引发您自己的事件,其他控件将知道您的控件被单击。有更多的方法处理点击事件。你应该看看 this msdn article this

    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;           
        }        
    }
    

    要测试此示例,请将控件命名为\u myCustomUserControl,并将名为\u TextBlock的TextBlock添加到MainWindow.xaml中

        3
  •  1
  •   Guilherme    13 年前

    为什么不用鼠标镇呢?

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