DragMove WPF无法正常工作

时间:2012-07-04 00:08:58

标签: wpf menu drag

DragMove()方法存在一个小问题。我想在处理菜单上的MouseLeftButtonDown事件时调用它(简单地说,我想通过菜单拖动窗口)。

我的XAML:

 <Window x:Class="LoginForm.RidicWindow"
    ...namespaces...
    Title="RidicWindow" Height="600" Width="800" WindowStyle="None" ResizeMode="NoResize" BorderBrush="#48067f" BorderThickness="2" Icon="img/EvidenceLogo.png">

some XAML
        <Menu x:Name="Menu" Grid.Column="0" Grid.Row="0" MouseLeftButtonDown="Drag">
 ...rest of doc

相应的C#代码:

private void Drag(object sender, MouseButtonEventArgs e)
    {
        base.OnMouseLeftButtonDown(e);
        this.DragMove();
    }

它不起作用。我不知道为什么。菜单是UIElement的后代,所以在我看来,一切似乎都没问题。

我认为这很简单,我在代码中犯了一个愚蠢的错误。

1 个答案:

答案 0 :(得分:1)

菜单本身会消耗MouseLeftButtonDown事件。因此,不会调用任何事件处理程序。只会引发PreviewMouseLeftButtonDown。但是在此事件中调用DragMove()会阻止正常的菜单功能。在DragMove()内部发送WM_LBUTTONUP消息,此方法返回后,似乎根本没有按下任何按钮。

解决方案可以是:将菜单放入具有两个列的网格中,一个自动,一个*(或省略宽度)。给网格一个背景,否则它不会接收鼠标事件

<Grid MouseLeftButtonDown="handler">
  <Grid.Background>
    <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.MenuBarColorKey}}" />
  </Grid.Background>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition />
  </Grid.ColumnDefinitions>

  <Menu IsMainMenu="True">...</Menu>
</Grid>

在左侧部分菜单消耗点击,在右侧部分将调用处理程序。