首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ContextMenu IsChecked绑定

WPF ContextMenu IsChecked绑定
EN

Stack Overflow用户
提问于 2017-07-03 06:31:06
回答 1查看 1.4K关注 0票数 1

如何为"IsChecked“编写绑定?我想看看两个菜单中的任何一个。

如果我单击"Hello1",我希望添加对“Hello1”的检查,并删除"Hello2“的检查。

如果我单击"Hello2",我希望添加对“Hello2”的检查,并删除"Hello1“的检查。

我试了一周。但我做不到。请帮我“如何写装订”没有互联网的例子。我最近开始了WPF编程。我只能做表格申请。这很不一样..。

代码语言:javascript
复制
<Window x:Class="WpfApp2.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <ContextMenu Name="ContextMenuMain" x:Key="menuListBox">
            <MenuItem Header="Hello1" IsChecked="{Binding Path=IsCheck1, Mode=OneWay}"  Name="ContextMenu_Hello1" Click="ContextMenuClick_Hello1"/>
        <MenuItem Header="Hello2"   IsChecked="{Binding Path=IsCheck2, Mode=OneWay}" Name="ContextMenu_Hello2" Click="ContextMenuClick_Hello2"/>
    </ContextMenu>
    </Window.Resources>

</Window>

我最困难的一点是下面的代码。我试着在MainWindow中使用“MainWindow”的名称。但C#不允许我用它..。

代码语言:javascript
复制
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ContextMenu_Hello1.DataContext  // error !
        }
    }

这是不是超出范围了?但是为什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-03 14:19:54

设置窗口的ContextMenu属性。如果希望能够检查菜单项,还应该将IsCheckable属性设置为true。此外,不能将绑定模式设置为OneWay

代码语言:javascript
复制
<Window x:Class="WpfApp2.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.ContextMenu>
        <ContextMenu Name="ContextMenuMain">
            <MenuItem Header="Hello1" IsCheckable="True" IsChecked="{Binding Path=IsCheck1}"  Name="ContextMenu_Hello1" />
            <MenuItem Header="Hello2" IsCheckable="True" IsChecked="{Binding Path=IsCheck2}" Name="ContextMenu_Hello2" />
        </ContextMenu>
    </Window.ContextMenu>
</Window>

完成这些更改后,就可以绑定到DataContext的任何属性。

代码语言:javascript
复制
public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow ()
    {
        InitializeComponent();
        DataContext = this;
    }

    private bool _isCheck1;
    public bool IsCheck1
    {
        get { return _isCheck1; }
        set
        {
            _isCheck1 = value;
            NotifyPropertyChanged();
            _isCheck2 = !_isCheck1;
            NotifyPropertyChanged("IsCheck2");
        }
    }

    private bool _isCheck2;
    public bool IsCheck2
    {
        get { return _isCheck2; }
        set
        {
            _isCheck2 = value;
            NotifyPropertyChanged();
            _isCheck1 = !_isCheck2;
            NotifyPropertyChanged("IsCheck1");
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44879087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档