基于WPF中复选框的值禁用上下文菜单

基于WPF中复选框的值禁用上下文菜单,wpf,data-binding,wpf-controls,contextmenu,Wpf,Data Binding,Wpf Controls,Contextmenu,我有一个网格和一个上下文菜单。现在我有另一个切换按钮,它将执行其他一些活动 现在我想要这两种行为 选中切换按钮后,如果用户按右键单击,则上下文菜单不应出现,而是 当切换按钮未选中时,如果用户执行右键单击,则屏幕上应显示关联菜单 我已经写了boolto,它工作得很好 <ContextMenu Visibility="{Binding RunViewModel.PlayModel.Active,Mode=OneWay, Converter={StaticResource ResourceK

我有一个网格和一个上下文菜单。现在我有另一个切换按钮,它将执行其他一些活动

现在我想要这两种行为

  • 选中切换按钮后,如果用户按右键单击,则上下文菜单不应出现,而是
  • 当切换按钮未选中时,如果用户执行右键单击,则屏幕上应显示关联菜单
我已经写了boolto,它工作得很好

<ContextMenu Visibility="{Binding RunViewModel.PlayModel.Active,Mode=OneWay, Converter={StaticResource ResourceKey=BoolToVisibilityConverter}}">

public class BoolToVisibilityConverter:IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Visibility visibility = Visibility.Collapsed;
        if (value!=null)
        {
            visibility = (bool)value ? Visibility.Collapsed : Visibility.Visible;
        }

        return visibility;
    }

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

公共类BooltVisibilityConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
可见性=可见性。已折叠;
if(值!=null)
{
可见性=(bool)值?可见性。折叠:可见性。可见;
}
返回能见度;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
RunViewModel.PlayModel.Active与切换按钮的IsChecked绑定

现在的问题是,, 当按钮被选中,我右键点击,然后它的工作很好,但当取消选中切换按钮,它是在屏幕上提交回来,我已经使绑定单向的问题仍然存在

有人能帮我吗

试试这个

 Visibility="{Binding PlacementTarget.DataContext.PlayModel.Active, RelativeSource={RelativeSource  Mode=Self}}"

如果您尝试使用
DataTrigger
而不是
IConverter
来执行此操作,您的运气会好得多。尝试此代码,当
切换按钮.IsChecked
属性值为
True
时,将
按钮.ContextMenu
设置为
null

<Grid>
    <ToggleButton Name="ToggleButton" Content="Check me" Width="100" Height="25" 
        Margin="0,60,0,0" />
    <Button Content="Click me" Margin="0" Width="100" Height="25">
        <Button.Resources>
            <ContextMenu x:Key="ContextMenu">
                <MenuItem Header="Option 1" />
                <MenuItem Header="Option 2" />
            </ContextMenu>
        </Button.Resources>
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsChecked, 
                        ElementName=ToggleButton}" Value="True">
                        <Setter Property="ContextMenu" Value="{x:Null}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</Grid>

Heya,这个答案的内容太少了——如果你能解释一下你的解决方案有什么不同,以及为什么它能解决问题,那就太好了。别忘了新手总是来这里,他们想知道你的补丁是如何解决问题的。。。所以他们可以从你身上学到一件事:)我已经写了booltoVisibility转换器。。。为什么?内置的有什么问题吗?