問題描述
今天發現如果我想在一個TextBlock弄一個右鍵菜單,並且使用Command綁定,結果發現默認菜單式不可用的.
問題原因
這個問題不知道算不算BUG,反正如果是在一個不可獲得的焦點的東西上面使用ContextMenu,CanExecute的事件路由就會停止在ContextMenu,就沒辦法到達窗體上.一個解決的方案是吧CommandTarget設置到窗體上去.
事例代碼
<Window x:Class="TestPopupMenuCommand.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.CommandBindings> <CommandBinding Command="Close" Executed="CloseCommand"/> <CommandBinding Command="New" Executed="NewCommand"/> </Window.CommandBindings> <Grid> <TextBlock> <TextBlock.ContextMenu> <ContextMenu> <MenuItem Command="New" CommandTarget="{Binding Path=PlacementTarget,RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> <MenuItem Command="Close"/> </ContextMenu> </TextBlock.ContextMenu> test </TextBlock> </Grid> </Window>
代碼分析
里面的兩個菜單項,New的是可用的,Close默認是不可以用的.因為我把New的CommandTarget修改了.
里面具體的command實現代碼我就不貼了.