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");
        }