在WPF中MouseDown / Up事件无法正常工作

ᴀʀʜᴀɴ

我有一个基于ToggleButton的自定义控件。在其构造函数中,我创建了一些type类型的元素,FrameworkElementFactory并向其中一个分配了一个EventHandler,如下所示:

button.AddHandler(Ellipse.MouseDownEvent,新的MouseButtonEventHandler(Toggle));

这是我的事件处理程序:

private void Toggle(object sender, EventArgs e)
{
    var active = GetTemplateChild("Active");
    var button = GetTemplateChild("ToggleButton");
    Storyboard sb = new Storyboard();

    var ta = new ThicknessAnimation();
    Storyboard.SetTargetProperty(ta, new PropertyPath("Margin"));
    Storyboard.SetTarget(ta, button);
    ta.Duration = TimeSpan.FromSeconds(0.2);


    var da = new DoubleAnimation();
    Storyboard.SetTargetProperty(da, new PropertyPath("Width"));
    Storyboard.SetTarget(da, active);
    da.Duration = TimeSpan.FromSeconds(0.2);

    if ((bool)IsChecked)
    {
        ta.To = new Thickness(0);
        da.To = (double)button.GetValue(Ellipse.WidthProperty);
        IsChecked = !IsChecked;
    }
    else
    {
        ta.To = new Thickness(this.Width - (double)button.GetValue(Ellipse.WidthProperty), 0, 0, 0);
        da.To = this.Width;
        IsChecked = !IsChecked;
    }

    sb.Children.Add(ta);
    sb.Children.Add(da);
    sb.Begin();
}

但这是行不通的。从只工作一次的意义上讲不起作用。我的意思是应该根据IsChecked属性设置滑块的宽度最初,它设置为false当我单击它时,它会按预期扩展到右侧。但是,当我再次单击时,它没有按预期向左移动。

更令人惊讶的是,它与MouseEnter事件完美配合其他所有类似事件MouseDown/Up/LeftMouseButtonUp/PreviewMouseDown.....也不起作用。

如果您想在不做大量编辑的情况下重现问题,请使用此处的代码然后只需在WPF应用程序中使用它,您就会看到。

任何帮助,不胜感激。

编辑:另一个发现:它适用于右键单击和中键单击,但不适用于左键单击。想知道为什么...??我的鼠标工作正常。

编辑#2: 转换器

贝琳·洛里奇(Berin Loritsch)

实现了几个自定义控件后,我发现了一些有趣的行为,特别是处理鼠标事件的行为。基本上,您可能会遇到另一个控件的情况,甚至在您ControlTemplate获取鼠标事件之前,甚至在您正在窃取鼠标焦点并消耗鼠标事件的情况下。

有两种解决方法:

  • 使用MousePreviewEvents,注意不要标记消耗的事件
  • 绑定到您希望看到的实际属性

在这种情况下,我会InternalIsCheckedProperty绑定一个ToggleButton.IsCheckedProperty以调用您的情节提要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mousedown事件在Firefox中无法正常工作

来自分类Dev

在MouseDown事件中获取形状的WPF名称

来自分类Dev

WPF MouseDown事件

来自分类Dev

我在setAttribute中的事件无法正常工作

来自分类Dev

WPF MouseDown事件未在控件中到处触发

来自分类Dev

WPF MouseDown事件未在控件中到处触发

来自分类Dev

.click事件中的.click事件无法正常工作

来自分类Dev

后台工作者在WPF中的do work事件中无法正常工作

来自分类Dev

WPF无法从MouseDown事件获得触摸位置

来自分类Dev

文档对象焦点事件在React中无法正常工作

来自分类Dev

事件preventDefault显然在Meteor中无法正常工作

来自分类Dev

按键事件在我的 Java 脚本中无法正常工作

来自分类Dev

将隧道Dockpanel Mousedown事件发送到WPF中的复选框

来自分类Dev

WPF中的绑定无法正常工作

来自分类Dev

WPF中的BackgroundWorker无法正常工作

来自分类Dev

在Angularjs中检测Mousedown事件

来自分类Dev

UserControl中的TextBox MouseDown事件

来自分类Dev

在Angularjs中检测Mousedown事件

来自分类Dev

WPF将鼠标悬停在具有网格路径的事件上无法正常工作

来自分类Dev

通过XSLT中的onclick事件传递变量无法正常工作

来自分类Dev

在IE8中无法正常工作的元素上触发点击事件

来自分类Dev

导航到自定义事件中的页面无法正常工作

来自分类Dev

绑定在Treeview WPF中无法正常工作

来自分类Dev

在Javascript中,“ this”无法正常工作

来自分类Dev

“ Not In”在sql中无法正常工作

来自分类Dev

在 mousedown 事件中忽略滚动条

来自分类Dev

WPF转换器无法正常工作

来自分类Dev

WPF延迟绑定无法正常工作

来自分类Dev

WPF Border ZIndex无法正常工作

Related 相关文章

热门标签

归档