Установка свойства PlacementTarget WPF ContextMenu в XAML?
<Button Name="btnFoo" Content="Foo" >
<Button.ContextMenu Placement="Bottom" PlacementTarget="btnFoo">
<MenuItem Header="Bar" />
</Button.ContextMenu>
</Button>
Выдает мне ошибку времени выполнения тип 'UIElement' не имеет открытого класса TypeConverter
Я тоже пытался
<Button Name="btnFoo" Content="Foo" >
<Button.ContextMenu Placement="Bottom" PlacementTarget="{Binding ElementName=btnFoo}">
<MenuItem Header="Bar" />
</Button.ContextMenu>
</Button>
И это поместило ContextMenu в верхний левый угол моего экрана, а не на кнопку
3 ответов:
Вы должны установить ContextMenuService.Размещение вложенного свойства на кнопке, как указано в примечаниях в документации по ContextMenu.Размещение .
<Button Name="btnFoo" Content="Foo" ContextMenuService.Placement="Bottom"> <Button.ContextMenu> <ContextMenu> <MenuItem Header="Bar" /> </ContextMenu> </Button.ContextMenu> </Button>
Вы пробовали это:
<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; }Вы можете повторно использовать метод для нескольких кнопок и ContextMenu..
Comments