2016-04-01 10 views
0

子アイテムのコレクションをメニューアイテムに設定しようとしています。それは簡単でしたが、追加操作を行う余分なものを追加する必要があります。私はコンポジットコレクションを使用して、これを表示する必要がある既存のアイテムのコレクションに追加しました。ほとんど、MenuItemに複合コレクションの「倍増」を設定する

<MenuItem Header="Time Ranges" x:Name="TimeRangesMenuItem" 
     Background="{StaticResource TitleBarButtonBackgroundBrush}" 
     Margin="2"> 
    <MenuItem.Resources> 
     <CollectionViewSource Source="{Binding ElementName=TimeRangesMenuItem, Path=DataContext.TimeSpans}" x:Key="TimeSpanMenuItems" /> 
    </MenuItem.Resources> 
    <MenuItem.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer Collection="{Binding Source={StaticResource TimeSpanMenuItems}}" /> 
      <Separator /> 
      <MenuItem Header="Add New" cal:Message.Attach="NewTimeSpan()" /> 
     </CompositeCollection> 
    </MenuItem.ItemsSource> 
    <MenuItem.ItemTemplate> 
     <ItemContainerTemplate> 
      <MenuItem Header="{Binding Name}" cal:Message.Attach="ConfigureTimeSpan()" /> 
     </ItemContainerTemplate> 
    </MenuItem.ItemTemplate> 
</MenuItem> 

それは動作します:

は、ここでは、コードです。私が表示しようとしているDataContext.TimeSpans ViewModelは、2つのMenuItemの中に入れ子になっているのではなく、ただ1つを取り込むのではなく、この奇妙な動作をします(これは単一のTimeSpanViewModel "Time Span"を持っています):

。 "内側" のMenuItem注意、あなたがそれを押すと、内側のものが機能している:

enter image description here

通常のMenuItem:

enter image description here

誰もがいずれかを持ってこれを修正する方法のアイデア?アイテムItemContainerTemplateは何

答えて

1

...

私が観察されたようにそうでなければ、2 MenuItemsを作成し、あなたの代わりにMenuItem.ItemContainerStyleを操作したいと思います。


MenuItem.ItemTemplateは既に(コントロールによって異なり、ここでMenuItemComboBoxでは等、ComboBoxItem'S)所与のアイテムコンテナ内で定義します。 MenuItemItemContainerTemplateプロパティが表示されないため、テンプレートを返すセレクタを実装してItemContainerTemplateSelectorと設定するだけでこの方法を使用できます。

+0

Ah!もちろん。ありがとう、完璧に動作します。 – Joe

+0

@ジョー:私はかなり間違いを犯したと確信しています。 –

関連する問題