2012-07-04 73 views
0

我有一個DragMove()方法的小問題。我想在處理菜單上的MouseLeftButtonDown事件時處理這個事件(簡單地說,我想通過菜單拖動窗口)。DragMove WPF不工作

我的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 

而且coresponding C#代碼:

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

它不工作。我不知道爲什麼。菜單是UIElement的後裔,所以在我看來,一切似乎都沒問題。

我相信這很簡單,我在代碼中有一個愚蠢的錯誤。

回答

0

你可以找到一個很好的例子here

+0

只需要一個鏈接的答案可以通過包含該地點可找到的內容的摘要來改進 – ronalchn

+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> 

在左側菜單消耗了一下,右邊部分的處理器將被調用。