2014-05-15 92 views
0

我有下面的XAML定義在WPF中的文本菜單:WPF文本菜單上結合工程右鍵單擊但不左鍵點擊

<Grid Name="grid"> 
    <Button x:Name="settingsButton" DockPanel.Dock="Left" Content="Settings" Click="SettingsButtonClicked"> 
     <Button.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header ="Column Chooser"> 
        <MenuItem IsCheckable="true" Header="A" IsChecked="{Binding Path=IsAChoosen}"></MenuItem> 
        <MenuItem IsCheckable="true" Header="B" IsChecked="{Binding Path=IsBChoosen}"></MenuItem> 
        <MenuItem IsCheckable="true" Header="C" IsChecked="{Binding Path=IsCChoosen}"></MenuItem> 
       </MenuItem> 
      </ContextMenu> 
     </Button.ContextMenu> 
    </Button> 
</Grid> 

的結合工作正常,如果我在彈出的右鍵菜單通常從右鍵點擊。

但是我希望在左鍵單擊按鈕而不是右鍵單擊時顯示contextmenu。所以我有以下代碼來做到這一點:

public partial class SettingsView : UserControl 
{ 
    public SettingsView() 
    { 
     InitializeComponent(); 
     settingsButton.MouseRightButtonDown += SettingsButtonOnMouseRightButtonDown; 
    } 

    private void SettingsButtonOnMouseRightButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
    { 
     settingsButton.ContextMenu.Visibility = Visibility.Hidden; 
    } 

    private void SettingsButtonClicked(object sender, RoutedEventArgs e) 
    { 
     settingsButton.ContextMenu.Visibility = Visibility.Visible; 
     settingsButton.ContextMenu.PlacementTarget = sender as Image; 
     settingsButton.ContextMenu.IsOpen = true; 
    } 
} 

當我這樣做的綁定不起作用。任何人都知道它爲什麼它與右鍵點擊工作,但不是當我強迫它左鍵點擊?

+1

也許是因爲你設置'PlacementTarget'爲null。 '發送者'將'按鈕'類型而不是'圖片' – dkozl

+0

這就是答案。 –

回答

2

相反圖像的設置PlacementTarget到按鈕

private void SettingsButtonClicked(object sender, RoutedEventArgs e) 
{ 
    settingsButton.ContextMenu.Visibility = Visibility.Visible; 
    settingsButton.ContextMenu.PlacementTarget = sender as Button; 
    settingsButton.ContextMenu.IsOpen = true; 
} 
+0

謝謝,工作過。我設法通過做settingsButton.ContextMenu.DataContext = DataContext;但我認爲你的解決方案要好得多。再次感謝! – user2436588