如何为"IsChecked“编写绑定?我想看看两个菜单中的任何一个。
如果我单击"Hello1",我希望添加对“Hello1”的检查,并删除"Hello2“的检查。
如果我单击"Hello2",我希望添加对“Hello2”的检查,并删除"Hello1“的检查。
我试了一周。但我做不到。请帮我“如何写装订”没有互联网的例子。我最近开始了WPF编程。我只能做表格申请。这很不一样..。
<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#不允许我用它..。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ContextMenu_Hello1.DataContext // error !
}
}这是不是超出范围了?但是为什么呢?
发布于 2017-07-03 14:19:54
设置窗口的ContextMenu属性。如果希望能够检查菜单项,还应该将IsCheckable属性设置为true。此外,不能将绑定模式设置为OneWay。
<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的任何属性。
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));
}
}https://stackoverflow.com/questions/44879087
复制相似问题