選択した項目を追跡するメニューを作成したいので、入れ子になった ListBox を使用しています (セレクターのオプションがかなり限られているためです。メインの ListBox は水平に配置され、各 ListBoxItem には TextBlock と、別の ListBox を含む StackPanel が含まれています (この1つは垂直に表示されます)「MenuItems」を表示します(選択したアイテムも追跡する必要があります)。
<ListBox DockPanel.Dock="Top" Grid.Column="0" ItemsSource="{Binding DashBoards}"
IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding SelectedDashBoard}">
<ListBox.Template>
<ControlTemplate TargetType="{x:Type ListBox}">
<DockPanel>
<ScrollViewer x:Name="scrollviewer" HorizontalScrollBarVisibility="Hidden" CanContentScroll="False">
<StackPanel IsItemsHost="True" Orientation="Horizontal" />
</ScrollViewer>
</DockPanel>
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}" />
<dx:DXExpander IsExpanded="{Binding IsSelected}">
<ListBox ItemsSource="{Binding Sections}"
IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding SelectedSection}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Metadata.Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</dx:DXExpander>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
この ListBox を他のコントロールの上に表示することができたので、メニューのように見えます。
問題が発生しました...水平のListBoxでアイテムを選択すると、Expanderは正常に拡張されますが、ListBoxの高さが大きくなるため、他のすべてのアイテムも拡張されたように見えます。
ListBox の高さを変更せずに、選択したアイテムのみを展開するにはどうすればよいですか?
言い換えれば、垂直の ListBox の 1 つをその親コンテナー (別名、水平の ListBox) からオーバーフローさせるにはどうすればよいでしょうか?
すべてを再構築する必要があると思いますが、どのように始めればよいかわかりません。Canvas を使用するソリューションをいくつか見つけましたが、この場合は機能しないようです。
どんな助けも歓迎され、熱心に支持されます;-)
(注: 念のため、水平方向の ListBox でどの要素が選択されているか、また個々の垂直方向の ListBox でどの要素が選択されているかを知る必要があります。これは、選択を追跡する対応する ViewModel にバインドし、水平および垂直の ListBoxes は動的に入力されるため、XAML で定義する方法はありません)