C# 如何区分用户控件内部和外部的单击输入?
(请将下面所述的每个控件作为使用MVVM模式创建的控件) 因此,我有一个C# 如何区分用户控件内部和外部的单击输入?,c#,wpf,mvvm,user-controls,inputbinding,C#,Wpf,Mvvm,User Controls,Inputbinding,(请将下面所述的每个控件作为使用MVVM模式创建的控件) 因此,我有一个UserControl,我把它放在我的main窗口上。我想要我的UserControl,如果单击(在main窗口中,在UserControl内部),背景将变为另一种颜色,如果我在main窗口中,但在UserControl之外,则UserControl的背景将变为原始颜色 我所尝试的: 我尝试在UserControl.InputBindings中应用一个命令来检测鼠标输入(MouseBinding),但唯一引发的MouseBi
UserControl
,我把它放在我的main窗口上。我想要我的UserControl
,如果单击(在main窗口中,在UserControl
内部),背景将变为另一种颜色,如果我在main窗口中,但在UserControl
之外,则UserControl
的背景将变为原始颜色
我所尝试的:
我尝试在UserControl.InputBindings
中应用一个命令来检测鼠标输入(MouseBinding
),但唯一引发的MouseBinding
是窗口中的MouseBinding
。InputBindings
(当点击输入在用户控件
之外时,只应引发,),但显然,无论在哪里发生点击,唯一引发的鼠标绑定
只有窗口中的一个。InputBindings
将窗口中的鼠标绑定
与用户控件.输入绑定
中的命令参数
区别开来
问题:
如何区分用户控件内部和外部的鼠标绑定
谢谢解决方案很简单。只需将PreviewMouseDown
事件处理程序附加到窗口和用户控件
上,并在窗口中处理这两个事件
:
为什么不仅仅是
?您能添加更多细节吗?UserControl做什么?在我看来,最常见的情况是人们希望显示某个元素是否具有焦点的视觉指示。这是您的情况吗?是的。没错。但我还想访问它的“聚焦”布尔值(类似于if(focused)){//do something}
whatsomething
?也可以通过触发器实现某些功能…我的意思是在UserControl
的ICommand的CanExecute
中返回“焦点布尔值”哈…是的,这些天我通常会选择最简单的解决方案,而不是最好的。我经常发现,当我推出大炮并提出一个伟大的解决方案时,我最终不得不回答一百万条评论,问更多的问题,我只是没有时间(或耐心)再这样做。这是正确的,但我正在尝试这样做“正确的MVVM”方式。@MosesAprico澄清一下,此解决方案不会“中断”“MVVM,因为它将代码隐藏用于特定于UI的目的,这是可以的。我同意这里的@HighCore。这纯粹是与UI相关的,因此在视图模型中不需要。但是,当您确实需要处理视图模型中的事件时,可以将其包装在附加属性中。请参阅我对问题的回答,以了解它是如何完成的。
<Window ... PreviewMouseDown="Window_PreviewMouseDown">
<UserControl Name="Control" PreviewMouseDown="UserControl_PreviewMouseDown" ... / >
</Window>
private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Control.Background = someNewColourBrush;
}
private void UserControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Control.Background = originalColourBrush;
}