1

この作業中のツリービューをメニューに変換するのに問題があります。

このツリービューは正しく表示されます。

<UserControl.DataContext>
    <ObjectDataProvider ObjectType="{x:Type storage:Database}"
                        MethodName="GetGroups"/>
</UserControl.DataContext>
<UserControl.Resources>
    <converters:PathToNameConverter x:Key="pathToNameConverter" />
</UserControl.Resources>
<TreeView Name="TreeViewMain" ItemsSource="{Binding Path=.}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type storage:File}">
            <TreeViewItem Header="{Binding Path=Name, Mode=TwoWay}" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type storage:Group}">
            <TreeViewItem>
                <TreeViewItem.Header>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <Image Source="../Images/Core/16x16/Folder.png" />
                        <TextBlock Text="{Binding Path=Name, Mode=TwoWay}"/>
                    </StackPanel>
                </TreeViewItem.Header>
                <ItemsControl ItemsSource="{Binding Path=Groups}" />
                <ItemsControl ItemsSource="{Binding Path=Files}" />
            </TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

すべてをメニューに変更しましたが、機能しません。右向きの矢印が付いたグループ名と画像があり、機能しているように見えますが、クリックしても展開しません。

<UserControl.DataContext>
    <ObjectDataProvider ObjectType="{x:Type storage:Database}"
                        MethodName="GetGroups"/>
</UserControl.DataContext>
<Menu Name="MenuMain" ItemsSource="{Binding Path=.}">
    <Menu.Resources>
        <HierarchicalDataTemplate DataType="{x:Type storage:File}">
            <MenuItem Header="{Binding Path=Name, Mode=TwoWay}" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type storage:Group}">
            <MenuItem>
                <MenuItem.Header>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <Image Source="../Images/Core/16x16/Folder.png" />
                        <TextBlock Text="{Binding Path=Name, Mode=TwoWay}" />
                    </StackPanel>
                </MenuItem.Header>
                <ItemsControl ItemsSource="{Binding Path=Groups}" />
                <ItemsControl ItemsSource="{Binding Path=Files}" />
            </MenuItem>
        </HierarchicalDataTemplate>
    </Menu.Resources>
</Menu>

私は何を間違っていますか?

4

1 に答える 1

1

私はあなたが間違ったことを本当に見ていませんでした.代わりに動作するコードを投稿します.

<Menu ItemsSource="{Binding Menus}" Name="menu" Height="20">        
    <Menu.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type plugin:MenuEntry}">
            <HierarchicalDataTemplate.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding Command}" />
                    <Setter Property="Icon" Value="{Binding Icon}" />
                    <Setter Property="InputGestureText" Value="{Binding InputGestureText}" />
                    <Setter Property="IsCheckable" Value="{Binding IsCheckable}" />
                    <Setter Property="IsChecked" Value="{Binding IsChecked}" />

                    <!-- Handle separators -->
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Header}" Value="[Separator]">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Separator />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>                    
            </HierarchicalDataTemplate.ItemContainerStyle>
            <ContentControl Content="{Binding Header}"/>                
        </HierarchicalDataTemplate>
    </Menu.ItemTemplate>
</Menu>

メニューは、ヘッダー、アイコンなどのすべてのプロパティを持つオブジェクトの単純なコレクションにバインドされています。また、サブアイテムを含む Items プロパティもあります。

それは完全にあなたが探しているものではありませんが、おそらく修正できるでしょう。あなたと同じようなアプローチを試みたのを覚えていますが、ひどく失敗したことを覚えています。Menu はそれ自体で MenuItem オブジェクトを生成します (そして、それに別のオブジェクトを追加しようとしています。それを行う必要はありません。代わりにスタイルを設定するだけです)。2 つの ItemsControls は私には少し奇妙に見えます (ただし、それらが必要です)。

于 2011-04-14T10:41:34.910 に答える