7

任何人都知道为什么菜单项绑定不起作用?

<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>
4

1 回答 1

8

我猜这是您在使用数据绑定时遇到问题的上下文菜单。

切换按钮不在上下文菜单的逻辑树中,因此无法使用 ElementName 找到切换按钮,请参阅http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and -visual-trees-in-wpf.aspx

这就是为什么您在 VS 的输出窗口中收到该绑定错误的原因:

System.Windows.Data 错误:4:找不到与引用“ElementName = toggleButton”进行绑定的源。绑定表达式:路径=IsChecked;数据项=空;目标元素是'MenuItem'(名称='menuItemBlock');目标属性是“IsChecked”(类型“布尔”)

要修复,请使用 FindAncestor 查找切换按钮:

<MenuItem 
  Header="Block" 
  IsCheckable="True" 
  IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget.IsChecked}" />
于 2010-05-25T18:37:10.987 回答