Привязка 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>
7
задан Kaya 25 May 2010 в 12:42
поделиться

1 ответ

Я предполагаю, что это контекстное меню, с которым у вас возникли проблемы с использованием привязки данных.

Переключатель отсутствует в логическом дереве контекстного меню, поэтому он не может найти переключатель с помощью 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}" />
8
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: