上下文
我根据我们的主题和需求定制TreeView
。最后一级树层次结构是元素列表(下面带有文本的缩略图)。它们排成两列,连续排列两个元素。这是使用ListBox
UniformGrid
作为ItemsPanel
来实现的。我对整个ScrollViewer
有一个TreeView
。 ListBox
本身包含在具有重载样式的倒数第二个TreeViewItem
中(见下文)。这是必需的,这样我可以每行放两个元素并删除Expander
和缩进等。
问题
当TreeView
中的项目数量增加时,会出现滚动条,但会将ListBox
转移到左侧。如果我折叠了一些元素,则滚动条消失,项目(带文本的缩略图)再次向右移动。
我尝试了什么
我已尝试在Width
,MaxWidth
和HorizontalScrollBarVisibility
上为ScrollViewer
指定TreeView
,ContentPresenter
和停用ListBox
。但现在还好运。我不知道在出现ScrollViewer
时如何防止项目向左移动。
ListBox XAML
<ListBox ItemsSource="{Binding Children}" Background="Black" SelectionMode="Extended" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MaxWidth="230">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Padding" Value="0"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
<Setter Property="Width" Value="95"></Setter>
<Setter Property="IsSelected" Value="{Binding IsSelected,Mode=OneWayToSource}"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter MaxWidth="230" Width="230" ScrollViewer.HorizontalScrollBarVisibility="Disabled"></ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" Width="220" Margin="0,15,0,0"></UniformGrid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
倒数第二个TreeViewItem样式
<Style TargetType="TreeViewItem" x:Key="myStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeViewItem">
<ContentPresenter ContentSource="Header" Margin="{Binding Converter={StaticResource mySNThumbnailItemHostMarginConverter}}"
MaxWidth="230" Width="230" ScrollViewer.HorizontalScrollBarVisibility="Disabled"></ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我怎样才能做到这一点?谢谢你的帮助!