代码之家  ›  专栏  ›  技术社区  ›  amitairos

UserControl PreviewMouseLeftButtonUp问题

wpf
  •  0
  • amitairos  · 技术社区  · 16 年前

    我在WPF中有一个UserControl。我还有一个无边界窗口。要移动它-我使用DragMove。 问题是-如果我单击控件,然后移动窗口-单击时也会触发事件 控制装置,不在上面。

    这是我的密码:

    <UserControl x:Class="WpfApplication1.UserControl1"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
           mc:Ignorable="d" 
           d:DesignHeight="300" d:DesignWidth="300" MouseEnter="UserControl_MouseEnter" MouseLeave="UserControl_MouseLeave">
      <Grid>
    
      </Grid>
    </UserControl>
    

    用户控制1.xaml.cs:

    public partial class UserControl1 : UserControl
      {
        public UserControl1()
        {
          InitializeComponent();
        }
    
        private void UserControl_MouseEnter(object sender, MouseEventArgs e)
        {
          CaptureMouse();
        }
    
        private void UserControl_MouseLeave(object sender, MouseEventArgs e)
        {
          ReleaseMouseCapture();
        }
    
    
      }
    

    主窗口.xaml:

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:WpfApplication1" WindowStyle="None" MouseLeftButtonDown="Window_MouseLeftButtonDown">
      <Grid>
        <my:UserControl1 Margin="39,29,380,199" Background="Red" PreviewMouseLeftButtonUp="UserControl1_PreviewMouseLeftButtonUp">
    
        </my:UserControl1>
      </Grid>
    </Window>
    

    主窗口.xaml.cs:

    public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
        }
    
    
        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
          DragMove();
        }
    
        private void UserControl1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
          MessageBox.Show("Hello World");
        }
      }
    

    如果你运行这个应用程序-你会看到,如果你点击控件,然后拖动窗口,然后点击控件附近(侧面可能不同)-它会触发PreviewMouseLeftButtonUp事件,即使你没有点击控件本身。

    有什么办法解决这个问题吗? 谢谢!

    1 回复  |  直到 16 年前
        1
  •  0
  •   amitairos    16 年前

    我用MouseMove代替MouseLeave。

     private void UserControl_MouseEnter(object sender, MouseEventArgs e)
      {
       if (this.IsEnabled)
        CaptureMouse();
      }
    
      private void UserControl_MouseMove(object sender, MouseEventArgs e)
      {
           Point mouseposition = e.GetPosition(this);
           if (mouseposition.X < 0 || mouseposition.Y < 0 || mouseposition.X > this.ActualWidth || mouseposition.Y > this.ActualHeight)
            ReleaseMouseCapture();
      }