0

次のようなメニューを作りたいと思っています。

┌──────────────────────────┐
│ MenuItem always the same │
│ <Separator />            │
│ MenuItem read from XML 1 │
│ MenuItem read from XML 2 │
│ MenuItem read from XML n │
└──────────────────────────┘

また、これは MainMenu で再利用し、ContextMenu のサブメニューとしても再利用する必要があります。

現在、XAML には次のものがあります。

<Window.Resources>
    <XmlDataProvider x:Key="ItemTypes" Source="C:\Config.xml"
        XPath="Configuration/ItemTypes/ItemType" />

    <collections:ArrayList x:Key="mnuAdd" x:Shared="False">
        <MenuItem Command="local:MainWindow.AddItemGroup" Header="Item Group" />
        <Separator />
        <ItemsControl ItemsSource="{Binding Source={StaticResource ItemTypes}}" />
    </collections:ArrayList>

</Window.Resources>

また、XML に次の内容を含めます。

<Configuration>
    <ItemTypes>
        <ItemTypeName="Item1" DisplayName="First Item" />
        <ItemTypeName="Item2" DisplayName="Second Item" />
    </ItemTypes>
</Configuration>

もちろん、私は HierarchicalDataTemplate を持っていますが、正しく表示されません。

これに設定した場合:

    <HierarchicalDataTemplate DataType="ItemType">
        <TextBlock Text="{Binding XPath=@DisplayName, StringFormat={}{0}}"
            Tag="{Binding XPath=@Name}" MouseLeftButtonUp="AddItemMenu_Click"
            MouseRightButtonUp="AddItemMenu_Click" />
    </HierarchicalDataTemplate>

次のように表示されます。

ここに画像の説明を入力

これに設定した場合:

    <HierarchicalDataTemplate DataType="ItemType">
        <MenuItem Header="{Binding XPath=@DisplayName, StringFormat={}{0}}"
            Tag="{Binding XPath=@Name}" MouseLeftButtonUp="AddItemMenu_Click" 
            MouseRightButtonUp="AddItemMenu_Click" />
    </HierarchicalDataTemplate>

次のように表示されます。

ここに画像の説明を入力

通常のメニュー項目として正しく表示されるようにスタイルを設定するにはどうすればよいですか?

以前の調査によると<collections:ArrayList x:Key="mnuAdd" x:Shared="False">、同じ静的リソースを MainMenu と ContextMenu の両方に表示する必要があるため、必須であることに注意してください。これを使わないと片方が消えてしまいます。

更新 1:

HBによると、次のように変更されまし<collections:ArrayList>CompositeCollection

    <CompositeCollection x:Key="mnuAdd" x:Shared="False">
        <MenuItem Command="local:MainWindow.AddItemGroup" Header="Item Group" />
        <Separator />
        <CollectionContainer Collection="{Binding Source={StaticResource ItemTypes}}" />
    </CompositeCollection>

私の DataTemplate がMenuItemの場合、まだぎこちなく表示されます。

ここに画像の説明を入力

私の DataTemplate がの場合、問題なく表示されますが、テキストから少し離れている場合ではなく、テキスト上にあるTextBlock場合にのみクリックが処理されます。

ここに画像の説明を入力

どうすればうまく機能し、見栄えがよくなりますか?

編集2:TextBlock次のように水平方向に 拡張することで、クリックの問題を解決できました:

    <DataTemplate DataType="ItemType">
        <TextBlock Text="{Binding XPath=@DisplayName, StringFormat={}{0}}"
            Tag="{Binding XPath=@Name}" MouseLeftButtonUp="AddItemMenu_Click" 
            MouseRightButtonUp="AddTestItemMenu_Click"
            Margin="-30,0,-60,0" Padding="30,0,60,0" HorizontalAlignment="Stretch" />
    </DataTemplate>

今では見栄えが良く、うまく機能しています。

4

1 に答える 1

3

a を使用しCompositeCollectionてリストを作成し、 aCollectionContainerを動的部分に使用します。

于 2013-06-04T15:24:41.870 に答える