1

我正在使用ItemsControl中的ItemsPanel内的WrapPanel。只要添加的项目符合尺寸,此功能就完美了。为了满足内容超出尺寸的情况,我添加了一个ScrollViewer。但是现在,只有垂直列出项目,即使它们都适合。任何想法,如果这是可能的,我必须做什么。ItemsControl中的WrapPanel添加ScrollViewer导致松动包装行为

这是我的XAML:

<ItemsControl Name="LicSwUserItemsCtl" Grid.Column="1" Grid.Row="2"> 
<ItemsControl.Template> 
    <ControlTemplate> 
     <ScrollViewer Name="Scroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"> 
      <ItemsPresenter /> 
     </ScrollViewer> 
    </ControlTemplate> 
</ItemsControl.Template> 
<ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <toolkit:WrapPanel Orientation="Vertical" HorizontalAlignment="Stretch" Margin="0" Name="wrpPanel" VerticalAlignment="Stretch" /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <Border x:Name="BrdrStkPnlSwLicUser" CornerRadius="2" BorderThickness="1" Width="120" Height="20" Margin="0,0,3,0" BorderBrush="Transparent"> 
      <StackPanel Name="StkPnlSwLicUser" Orientation="Horizontal" Height="18" Width="120" Margin="0" MouseEnter="StackPanel_MouseEnter" MouseLeave="StackPanel_MouseLeave" MouseLeftButtonUp="StackPanel_MouseLeftButtonUp" > 
       <Image Source="{Binding Converter={StaticResource IconImage}}" Margin="2,0,3,0" Height="16" Width="16" /> 
       <TextBlock Name="txtBlk" Text="{Binding NodeText}" /> 
      </StackPanel> 
     </Border> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 

回答

0

我发现其实之前我张贴了我的问题的解决方案。但我认为这可能对其他人有用。

我给ScrollViewer添加了一个SizeChanged处理函数。

SizeChanged="Scroller_SizeChanged" 

在处理程序中,我添加了下面的代码。

private void Scroller_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    WrapPanel wrpPanel = (WrapPanel)LicSwUserItemsCtl.GetItemsHost(); 
    wrpPanel.MaxHeight = ((ScrollViewer)sender).ActualHeight; 
    wrpPanel.MaxWidth = ((ScrollViewer)sender).ActualWidth; 
} 

如果可以通过绑定xaml中的MaxWidth,MaxHeight属性来实现,我会感兴趣。