WPF中ContextMenu(右鍵菜單)使用Command在部分控件上默認為灰色的處理方法


問題描述

今天發現如果我想在一個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實現代碼我就不貼了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM