Привязка TabControl.Items к MenuItem - PullRequest
2 голосов
/ 15 июня 2009

Я использую 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, который на самом деле не является ожидаемым результатом (флажок находится в области заголовка, и вокруг внутреннего элемента есть отдельная граница). 1006 *

Есть ли лучший способ сделать это?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 15 июня 2009

Малкольм, вы захотите использовать IsSelected вместо IsFocused при привязке к MenuItem.

Если вы используете IsSelected вместо IsFocused, вы также сможете связать IsSelected с Mode = TwoWay, чтобы вам не приходилось использовать обработчик Click для выбора соответствующего TabItem.

2 голосов
/ 15 июня 2009

Хотя кажется, что должен быть способ сделать это с помощью шаблонов, создание и использование стиля, похоже, работает:

<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}" />
...