【问题标题】:Binding TabControl.Items to MenuItem将 TabControl.Items 绑定到 MenuItem
【发布时间】:2009-06-15 16:20:30
【问题描述】:

我在应用程序中使用 TabControl 作为我的主要工作区,并且我想添加一个“窗口”菜单项,其中列出了打开的选项卡的标题。应选中活动(即 - 聚焦)选项卡。

我尝试使用 ItemsTemplate,如下所示:

            <MenuItem Header="_Window" ItemsSource="{Binding ElementName=ux_workspace, Path=Items}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Path=Header}" IsCheckable="True" IsChecked="{Binding IsFocused, Mode=OneWay}">
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>

然后每个 MenuItem 都“嵌套”在另一个 MenuItem 内部,这实际上不是预期的结果(复选框位于标题区域,内部项目周围有一个单独的边框)。

有没有更好的方法来做到这一点?

提前致谢。

【问题讨论】:

    标签: c# wpf datatemplate menuitem itemtemplate


    【解决方案1】:

    虽然看起来应该有一种方法可以使用模板来做到这一点,但创建和使用样式似乎是可行的:

    <Style x:Key="TabMenuItem" TargetType="MenuItem">
        <Setter Property="Header" Value="{Binding Path=Header}" />
        <Setter Property="IsCheckable" Value="True" />
        <Setter Property="IsChecked" Value="{Binding Path=IsFocused, Mode=OneWay}" />
    </Style>
    
    <MenuItem Header="_Window"
        ItemsSource="{Binding ElementName=ux_workspace, Path=Items}"
        ItemContainerStyle="{StaticResource TabMenuItem}" />
    

    【讨论】:

    • 安迪——太棒了,感谢您快速有效的回复。我必须对您的代码进行一项更改以支持我的目的(删除 IsCheckable 设置器并添加一个 Click 处理程序以聚焦适当的 TabItem),但除此之外它工作得很好。我会投票给答案有帮助,但我还没有足够的声誉(只是一个新手)。谢谢。
    • 实际上,正确的反应是将这个答案标记为已接受,因此表明您已经找到了您正在寻找的答案。点击投票数下方的复选标记以接受答案。
    • 谢谢,安迪。新手又来了……;)
    【解决方案2】:

    Malcolm,在绑定到 MenuItem 时,您需要使用 IsSelected 而不是 IsFocused。

    如果您确实使用 IsSelected 而不是 IsFocused,您还可以将 IsSelected 与 Mode=TwoWay 绑定,这样您就不必使用 Click 处理程序来选择适当的 TabItem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多