Кто-либо знает, почему привязка пункта меню не работает?
<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>
Я предполагаю, что это контекстное меню, с которым у вас возникли проблемы с использованием привязки данных.
Переключатель отсутствует в логическом дереве контекстного меню, поэтому он не может найти переключатель с помощью ElementName, см. http: //blogs.msdn.com / b / mikehillberg / archive / 2008/05/23 / of-logic-and-visual-tree-in-wpf.aspx
Вот почему вы получаете сообщение об ошибке для этой привязки в окне вывода в VS:
System.Windows.Data Ошибка: 4: не удается найти источник для привязки с ссылка 'ElementName = toggleButton'. BindingExpression: Путь = IsChecked; DataItem = null; целевой элемент 'MenuItem' (Name = 'menuItemBlock'); целевое свойство - IsChecked (введите 'Boolean')
Чтобы исправить это, найдите переключатель с помощью FindAncestor:
<MenuItem
Header="Block"
IsCheckable="True"
IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget.IsChecked}" />