1

ここでやろうとしているのは、TabControl で特定のタブ (この場合は「表示」メニュー) が選択されているかどうかに基づいて、MenuItem の可視性を設定することです。私の好みは、コード ビハインドでこれを行うことを避けることです。これは可能であると確信しています。

私が持っているものを投稿しますが、明らかに間違っています。

<Window x:Class="CallEntryTool.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Call Entry" Height="720" Width="800">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </Window.Resources>
    <DockPanel>
        <Menu Height="27" DockPanel.Dock="Top" HorizontalAlignment="Stretch"  Name="menu1" VerticalAlignment="Top">
            <MenuItem Header="_File" >
                <MenuItem Header="_Open Customer File" />
                <MenuItem Header="E_xit" />
            </MenuItem>
            <MenuItem Header="_View"
                      Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}"
                      >
                <MenuItem Header="_Refresh">
                    <MenuItem Header="_Incremental" />
                    <MenuItem Header="_Full" />
                </MenuItem>
            </MenuItem>
            <MenuItem Header="_Help">
                <MenuItem Header="_About" />
            </MenuItem>
        </Menu>
        <StatusBar DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Stretch">
            <StatusBarItem Content="Customer File.bpcl"></StatusBarItem>
            <Separator/>
            <StatusBarItem Content="Server Status"></StatusBarItem>
        </StatusBar>
        <TabControl x:Name="_mainTabControl">
            <TabItem x:Name="_callEntryTab" Header="Customer Call Entry">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem x:Name="_geoDisplayTab" Header="Geographic Display">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem x:Name="_callsTab" Header="Customer Calls">
                <Grid x:Name="_customerCallsTab" Background="#FFE5E5E5" />
            </TabItem>
            <TabItem x:Name="_unassocCallsTab" Header="Unassociated Calls">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </DockPanel>
</Window>

最初の明らかな問題は、'View' メニュー項目を TabItem の 'IsSelected' プロパティにバインドしようとしていますが、どの TabItem を指定するかわかりません。

2 つ目の問題は、TabControl が MenuItem の先祖ではないため、FindAncestor 呼び出しが機能しないことです。

同様の (ただし同じではない) 問題を解決するオンライン記事の多くは、コンテナーの DataContext を変更します。これは MVVM アプリになるので、DataContext がビューモデルになりますよね?

おそらく私が自分で理解できるはずだったことをお詫びします。

4

1 に答える 1

1

私は疲れているに違いない。これが解決策です。

<MenuItem Header="_View"
            Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=_callsTab}"
            >

昼寝の時間...

于 2013-10-28T23:58:21.343 に答える