ICommand 类型的 WPF 附加属性
Posted
技术标签:
【中文标题】ICommand 类型的 WPF 附加属性【英文标题】:WPF Attached Property of type ICommand 【发布时间】:2021-12-27 21:20:04 【问题描述】:我想为按钮实现一个新的附加属性,如果鼠标悬停则注册,如果是则执行命令。 这是 C# 代码:
public class MouseMovement
public static readonly DependencyProperty MouseOverCommandProperty =
DependencyProperty.RegisterAttached("MouseOverCommand", typeof(ICommand), typeof(MouseMovement),
new FrameworkPropertyMetadata(new PropertyChangedCallback(MouseOverCommandChanged)));
private static void MouseOverCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
FrameworkElement element = (FrameworkElement)d;
element.MouseEnter += new MouseEventHandler(element_MouseOver);
private static void element_MouseOver(object sender, MouseEventArgs e)
FrameworkElement element = (FrameworkElement)sender;
ICommand cmd = GetMouseOverCommand(element);
cmd.Execute(e);
public static void SetMouseOverCommand(UIElement element, ICommand value)
element.SetValue(MouseOverCommandProperty, value);
private static ICommand GetMouseOverCommand(FrameworkElement element)
return (ICommand)element.GetValue(MouseOverCommandProperty);
还有 xaml:
<Button mouseEvents:MouseMovement.MouseOverCommand="Binding ButtonMouseOverCommand" Grid.Row="0" Background="Transparent" BorderThickness="0" >
<StackPanel>
<Image />
<TextBlock Text="BL-Invoices" Foreground="White"/>
</StackPanel>
</Button>
每次我尝试运行它时都会收到错误消息:“无法为按钮类型的属性“SetMouseOverCommand”指定绑定。只能为 DependencyObject 的 DependencyProperty 指定绑定”
我在这一点上有点卡住了,也许你有一些想法。
编辑:正如接受的答案中所述,错误是一个错字。 AttachedProperty 名称设置为“MouveOverCommand”而不是“MouseOverCommand”。我将代码 sn-p 编辑为正确。
【问题讨论】:
制作 GetMouseOverCommandpublic
同意应该公开,但仍然不是最终的解决方案。例外仍然存在。 'GetMouseOverCommand' 中的元素也应该是 UIElement,但这仍然没有区别。
您应该改用行为 (Windows.Interactivity)。
@DerrickMoeller 有时最好重新阅读你写的东西。不过,谢谢!
@Leandro 谢谢我去看看。
【参考方案1】:
看起来只是一个错字,我将您的代码放入示例项目中,它按预期工作。
public static readonly DependencyProperty MouseOverCommandProperty =
DependencyProperty.RegisterAttached("MouseOverCommand", typeof(ICommand), typeof(MouseMovement),
new FrameworkPropertyMetadata(new PropertyChangedCallback(MouseOverCommandChanged)));
【讨论】:
以上是关于ICommand 类型的 WPF 附加属性的主要内容,如果未能解决你的问题,请参考以下文章