C# 如何捕获和处理PreviewMouseDownOutsideCapturedElementEvent?
我有一个干净的窗口,里面有一个边框,如果它在边框之外,我想处理鼠标点击。C# 如何捕获和处理PreviewMouseDownOutsideCapturedElementEvent?,c#,wpf,mouseevent,C#,Wpf,Mouseevent,我有一个干净的窗口,里面有一个边框,如果它在边框之外,我想处理鼠标点击。 我尝试了此代码,但无效: 代码隐藏: public MainWindow() { InitializeComponent(); AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseButtonEventHandler(onmousedown), true); Mouse.C
我尝试了此代码,但无效: 代码隐藏:
public MainWindow()
{
InitializeComponent();
AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseButtonEventHandler(onmousedown), true);
Mouse.Capture(this.border,CaptureMode.Element);
}
private void onmousedown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Test");
}
请帮助我,或指导我如何操作。将
MouseDown
事件添加到窗口(或父控件),您可以使用MouseButtonEventArgs
确定单击了哪个元素。下面是一个例子:
<Grid Background="Transparent" MouseDown="GridMouseDown">
<Border Width="100" Height="100" Background="Red"/>
</Grid>
我通过创建一个简单的控件解决了问题,如下所示:
我得到的是在load事件中初始化捕获
public class ModulesMenuControl : Control
{
static ModulesMenuControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ModulesMenuControl), new FrameworkPropertyMetadata(typeof(ModulesMenuControl)));
}
public ModulesMenuControl()
{
this.Loaded += MouseCaptureControl_Loaded;
}
void MouseCaptureControl_Loaded(object sender, RoutedEventArgs e)
{
//throw new NotImplementedException();
this.AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseButtonEventHandler(onmousedown), true);
Mouse.Capture(this, CaptureMode.SubTree);
}
private void onmousedown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("out click");
}
边界可能有按钮之类的控件。。。这对我不起作用。源成为单击的项目。在加载的事件上捕获鼠标就成功了!这应该是公认的答案。
public class ModulesMenuControl : Control
{
static ModulesMenuControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ModulesMenuControl), new FrameworkPropertyMetadata(typeof(ModulesMenuControl)));
}
public ModulesMenuControl()
{
this.Loaded += MouseCaptureControl_Loaded;
}
void MouseCaptureControl_Loaded(object sender, RoutedEventArgs e)
{
//throw new NotImplementedException();
this.AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseButtonEventHandler(onmousedown), true);
Mouse.Capture(this, CaptureMode.SubTree);
}
private void onmousedown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("out click");
}