2009-08-13 66 views
13
<Button Name="btnFoo" Content="Foo" > 
    <Button.ContextMenu Placement="Bottom" PlacementTarget="btnFoo"> 
     <MenuItem Header="Bar" /> 
    </Button.ContextMenu> 
</Button> 

給了我一個運行時錯誤「的UIElement」類型不具有公共的TypeConverter類在XAML中設置WPF ContextMenu的PlacementTarget屬性?

我也試過

<Button Name="btnFoo" Content="Foo" > 
    <Button.ContextMenu Placement="Bottom" PlacementTarget="{Binding ElementName=btnFoo}"> 
     <MenuItem Header="Bar" /> 
    </Button.ContextMenu> 
</Button> 

,並且把文本菜單在我的屏幕的左上角,而比按鈕

回答

23

您應該在按鈕上設置ContextMenuService.Placement附加屬性,如ContextMenu.Placement文檔中的註釋所述。

<Button Name="btnFoo" Content="Foo" ContextMenuService.Placement="Bottom"> 
    <Button.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Bar" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 
+0

完美,謝謝! – kenwarner 2010-06-18 17:32:09

+0

我很困惑。爲什麼沒有PlacementElement綁定工作? – VitalyB 2011-02-09 12:44:51

+1

@VitalyB:正如MSDN文檔所述,當上下文菜單打開時(根據用戶打開菜單的方式將鼠標點或中心打開),PlacementTarget屬性會發生更改。因此,在屬性上設置綁定將不起作用 - 它將被更改。 – Tarsier 2011-02-09 16:46:02

3

你有沒有嘗試過這樣的:

<Button Name="btnFoo" Content="Foo"> 
    <Button.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Bar" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 

這會使ContextMenu在您右鍵單擊鼠標的位置打開(在按鈕上)。 我認爲這可能是你想要的位置嗎?

---編輯--- 在這種情況下使用:

<Button Name="btnFoo" Content="Foo" ContextMenuOpening="ContextMenu_ContextMenuOpening"> 
    <Button.ContextMenu> 
     <ContextMenu Placement="Bottom"> 
      <MenuItem Header="Bar" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 

而且在後面的代碼:

private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e) 
{ 
    // Get the button and check for nulls 
    Button button = sender as Button; 
    if (button == null || button.ContextMenu == null) 
     return; 
    // Set the placement target of the ContextMenu to the button 
    button.ContextMenu.PlacementTarget = button; 
    // Open the ContextMenu 
    button.ContextMenu.IsOpen = true; 
    e.Handled = true; 
} 

您可以重複用於多個按鈕的方法和文本菜單的..

+1

我很久以前開始使用Buttons和ContextMenus來創建ComboBox效果。雖然這可能有點愚蠢,但現在改變它爲時已晚。所以我想讓ContextMenu在按鈕下方打開,而不是實際發生點擊的地方。 – kenwarner 2009-08-13 20:30:17

+0

編輯應該做的訣竅... – Zenuka 2009-08-14 07:41:41

+0

當這個被實現時,上下文菜單出現在鼠標右鍵上。左鍵單擊鼠標可以實現相同的功能嗎?提前致謝。 – samar 2011-05-30 08:04:23

0

你可以使用一個<Menu />,風格爲Button並避免與ContextMenuService麻煩。