【问题标题】:Click event in UserControl- WPFUserControl-WPF 中的单击事件
【发布时间】:2010-07-11 08:58:54
【问题描述】:

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

【问题讨论】:

    标签: wpf


    【解决方案1】:

    您没有编写您想要执行的操作,但如果您需要点击事件,也许您正在编写某种按钮(Button 类实际上是“您可以点击的东西”,您可以在控件模板中使用可视化表示可以替换)

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

    【讨论】:

    • 是否可以只添加没有按钮的点击命令行为?
    【解决方案2】:

    我认为对于您的需求 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

    【讨论】:

    • 我不太明白您所说的使用 ClickCount 是什么意思。你能用代码演示一下吗?谢谢
    • ClickCount 是 MouseButtonEventArgs 的属性之一。声明事件处理程序时,可以通过 e.ClickCount 访问。您需要跟踪此值以了解它是否只是一次单击或更多。 if (e.ClickCount == 1) //在此处引发 Click 事件 if (e.ClickCount == 2) //在此处引发 DoubleClick 事件 如果您的处理程序是 Preview (意味着引发完全由您对父母的控制开始) 你可能应该在处理程序 e.Handled 中设置为 true。
    • 很抱歉,我现在没有在这台机器上安装 IDE 来向您发布如何正确处理它的清晰代码。 :(
    • 在事件处理程序中我在代码前写了 if(e.ClickCount ==1),但它仍然没有响应点击。
    • 谢谢,但我希望事件不在 UserControl 本身中,而是在我将它添加到窗口时。我想要 MainWindow.cs 中的事件处理程序
    【解决方案3】:

    为什么不直接使用 MouseDown?

    将事件放在用户控件中并简单地执行以下操作:

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

    【讨论】:

    • 单击是按下按钮并再次按下按钮,而不仅仅是按下按钮。
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多