ContextMenu可检查的菜单项不起作用

时间:2016-06-21 04:45:35

标签: xaml

这是我的代码

<UserControl.ContextMenu>
        <ContextMenu>
            <MenuItem IsCheckable="True" IsChecked="{Binding ElementName=btnSearch,Path=IsChecked}" Header="Search"/>
        </ContextMenu>
    </UserControl.ContextMenu>

       <Grid>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" >           
                <ToggleButton Style="{StaticResource ButtonAnchor}"  Content="Search" x:Name="btnSearch"/>
            </StackPanel>
        </Grid>

<Grid Visibility="{Binding ElementName=btnSearch, Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}">
</Grid>

我想更改最后一个网格的可见性,使用切换按钮检查已更改,其工作但是如何选中菜单项,同时还会更改上一个网格可见性。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望在检查两个网格或检查其中任何一个网格时更改此网格的可见性。我认为最好的方法来覆盖这两种情况,因为你没有说明你想要的是多重绑定。 这是我的实现,当我检查它们两个时隐藏网格但是它很容易变换。

首先,我们需要一个View。

<Window
    x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WpfApplication1"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="525"
    Height="350"
    mc:Ignorable="d">

    <Window.Resources>
        <local:BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <MenuItem
            Name="test"
            Grid.Row="0"
            Header="Search"
            IsCheckable="True"
            IsChecked="False" />

        <Grid Grid.Row="1">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" >
                <ToggleButton Content="Search" x:Name="btnSearch" IsChecked="False" />
            </StackPanel>
        </Grid>

        <Grid Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Bottom">
            <Grid.Visibility>
                <MultiBinding  Converter="{StaticResource booleanToVisibilityConverter}">
                    <Binding ElementName="btnSearch" Path="IsChecked" />
                    <Binding ElementName="test" Path="IsChecked" />
                </MultiBinding>
            </Grid.Visibility>

            <TextBlock Text="tralala" />
        </Grid>

    </Grid>
</Window>

在视图之后我们需要一个转换器。在我们的例子中,BooleanToVisibilityConverter。

public class BooleanToVisibilityConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values != null)
            {
                bool btnSerach = bool.Parse(values[0].ToString());
                bool menuItemTest = bool.Parse(values[1].ToString());

                if (btnSerach && menuItemTest)
                    return System.Windows.Visibility.Visible;
            }

            return System.Windows.Visibility.Collapsed;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

您可以根据需要轻松更改或扩展代码。希望这会有所帮助。