垂直ScrollViewer移动ListBox

时间:2015-06-22 03:41:57

标签: c# wpf xaml listbox treeview

上下文

我根据我们的主题和需求定制TreeView。最后一级树层次结构是元素列表(下面带有文本的缩略图)。它们排成两列,连续排列两个元素。这是使用ListBox UniformGrid作为ItemsPanel来实现的。我对整个ScrollViewer有一个TreeViewListBox本身包含在具有重载样式的倒数第二个TreeViewItem中(见下文)。这是必需的,这样我可以每行放两个元素并删除Expander和缩进等。

问题

TreeView中的项目数量增加时,会出现滚动条,但会将ListBox转移到左侧。如果我折叠了一些元素,则滚动条消失,项目(带文本的缩略图)再次向右移动。

我尝试了什么

我已尝试在WidthMaxWidthHorizontalScrollBarVisibility上为ScrollViewer指定TreeViewContentPresenter和停用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>

Sample Output

我怎样才能做到这一点?谢谢你的帮助!

0 个答案:

没有答案