Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击UserControl-WPF中的事件_Wpf - Fatal编程技术网

单击UserControl-WPF中的事件

单击UserControl-WPF中的事件,wpf,Wpf,我的WPF应用程序中有一个UserControl。 我想在用户单击UserControl时调用click事件并执行一些操作。 问题是-UserControl没有单击事件。 我在网上搜索,发现你可以使用MouseLeftButtonUp事件。 我试过了,但它对我的点击没有反应。我认为根据您的需要预览鼠标左键(向下)事件更合适。然后,您需要处理ClickCount以计算点击量,然后引发您自己的事件,其他控件将知道您的控件已被点击。有更多的方法处理点击事件。你应该看看 更新以处理单击和双击 publi

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

我认为根据您的需要预览鼠标左键(向下)事件更合适。然后,您需要处理ClickCount以计算点击量,然后引发您自己的事件,其他控件将知道您的控件已被点击。有更多的方法处理点击事件。你应该看看

更新以处理单击和双击

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添加到主窗口。xaml

您没有编写您正在尝试执行的操作,但是如果需要单击事件,可能您正在编写某种按钮(button类实际上是“您可以单击的内容”)使用控件模板中的可视表示形式(可以替换)

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

    • 为什么不直接使用鼠标向下

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

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

      我真的不明白你使用ClickCount是什么意思。你能用代码演示一下吗?ThanksClickCount是鼠标按钮Ventargs的特性之一。当您声明事件处理程序时,可以通过e.ClickCount访问它。您需要跟踪此值,以了解它是否只是一次单击或多次单击。如果(e.ClickCount==1)//在此处引发您的Click事件如果(e.ClickCount==2)//在此处引发您的双击事件如果您的处理程序是Preview(意味着引发完全从您的控件开始直到父控件),您可能应该在处理程序e.Handle中设置为true。很抱歉,我现在还没有在这台机器上安装IDE,可以向您发布如何正确处理它的清晰代码:(在我编写的事件处理程序中,if(e.ClickCount==1)在代码之前,但它仍然不响应单击。谢谢,但我希望事件不在UserControl本身中,而是在我将其添加到窗口时。我希望事件处理程序在MainWindow中。csClick是按钮按下并再次按下按钮,而不仅仅是按钮按下。是否可以只添加没有按钮的单击命令行为?