Kay*_*aya 7 wpf menuitem ischecked
任何人都知道为什么菜单项绑定不起作用?
<ToggleButton Name="toggleButton" Checked="checkBoxPublish_Checked" >
<ToggleButton.Resources>
<converters:BooleanToHiddenVisibility x:Key="boolToVis"/>
</ToggleButton.Resources>
<Grid>
<Image Height="auto" HorizontalAlignment="Left" Margin="5" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="auto" />
<Viewbox >
<TextBlock Text="Blocked" Opacity="0.7" Foreground="Red" Visibility="{Binding Path=IsChecked, ElementName=toggleButton, Converter={StaticResource boolToVis}}"/>
</Viewbox>
</Grid>
<ToggleButton.ContextMenu>
<ContextMenu StaysOpen="True" >
<MenuItem x:Name="menuItemBlock" Header="Block" Click="menuItemClick" IsCheckable="True" IsChecked="{Binding ElementName=toggleButton, Path=IsChecked}"/>
<MenuItem x:Name="menuItemIgnorePtz" Header="Ignore Ptz" Click="menuItemClick" IsCheckable="True" />
</ContextMenu>
</ToggleButton.ContextMenu>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)
我猜这是使用数据绑定时遇到问题的上下文菜单.
togglebutton不在contextmenu的逻辑树中,因此无法使用ElementName找到togglebutton,请参阅http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and -视觉树功能于wpf.aspx
这就是为什么在VS的输出窗口中出现该绑定的错误:
System.Windows.Data错误:4:无法找到引用'ElementName = toggleButton'的绑定源.BindingExpression:路径=器isChecked; 的DataItem = NULL; target元素是'MenuItem'(Name ='menuItemBlock'); target属性是'IsChecked'(类型'布尔')
要解决此问题,请使用FindAncestor查找切换按钮:
<MenuItem
Header="Block"
IsCheckable="True"
IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget.IsChecked}" />
Run Code Online (Sandbox Code Playgroud)