【问题标题】:Disable context menu based on the value of check box in WPF根据 WPF 中复选框的值禁用上下文菜单
【发布时间】:2014-06-12 06:48:56
【问题描述】:

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

现在我想要这两种行为

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

我已经编写了 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 绑定。

现在的问题是, 当按钮被选中并且我右键单击时它工作正常但是当取消选中切换按钮时它又回到了屏幕中,我已经进行了绑定 oneWay 仍然存在问题。

谁能帮帮我..!!

【问题讨论】:

标签: wpf data-binding wpf-controls contextmenu


【解决方案1】:

试试这个

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

【讨论】:

  • 嘿,这个答案内容很少——如果你能解释你的解决方案有何不同以及它为什么能解决问题,那就太好了。不要忘记新手一直都来这里,想知道你的解决方法是如何解决问题的……这样他们就可以向你学习:)
【解决方案2】:

尝试使用DataTrigger 而不是IConverter 来执行此操作会更幸运。试试这段代码,当ToggleButton.IsChecked 属性值为True 时,它将Button.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>

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2011-03-18
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多