根据WPF中的复选框值禁用上下文菜单

时间:2014-06-12 06:48:56

标签: wpf data-binding wpf-controls contextmenu

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

现在我想要这两个行为

  • 当选中切换按钮时,如果用户按下右键,则上下文菜单不应该出现
  • 当未选中切换按钮时,如果用户执行右键单击,则上下文菜单应出现在屏幕上。

我写过booltoVisibility转换器它工作正常。

<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();
    }
}

RunViewModel.PlayModel.Active与切换按钮的IsChecked绑定。

现在的问题是, 当按钮被选中并且我右键单击然后它工作正常但是当取消选中切换按钮它回来在屏幕上时,我已经使绑定一个仍然存在问题。

任何人都可以帮助我...... !!

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

使用DataTrigger而不是IConverter尝试执行此操作会有更多好运。试试这段代码,当Button.ContextMenu属性值为null时,会将ToggleButton.IsChecked设置为True

<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>