我有一个WPF UserControl包含ItemsControl
,其水平StackPanel
为ItemsPanel
(基本上是某种WinRT Hub控件)。内容扩展了UserControl的大小
如果我尝试在ScrollViewer
周围添加ItemsControl
,ScrollViewer
会缩小ItemsControl
,因此所有项目都适合UserControl范围。
多数民众赞成与我的预期相反,任何人都可以告诉我为什么scrollviewer会这样做?
这是我的UserControl
:
<UserControl x:Class="ContentModule.ContentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:contentModule="clr-namespace:ContentModule"
xmlns:regions="http://www.codeplex.com/CompositeWPF"
xmlns:statics="clr-namespace:Infrastructure.Statics;assembly=Infrastructure"
d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance contentModule:ContentViewModel}"
VerticalAlignment="Top" HorizontalAlignment="Left">
<ItemsControl regions:RegionManager.RegionName="{x:Static statics:ContentRegions.ContentCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</UserControl>
物品通过Prism RegionManager注入。
EDIT1:
UserControl
正在进入我的MainForm。它被分配给ContrentControl
=&gt; ShellRegions.Content(第三个)
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" cal:RegionManager.RegionName="{x:Static statics:ShellRegions.MainMenu}" />
<ItemsControl Grid.Row="1" cal:RegionManager.RegionName="{x:Static statics:ShellRegions.NavigationBar}" />
<ContentControl Grid.Row="2" cal:RegionManager.RegionName="{x:Static statics:ShellRegions.Content}" />
</Grid>
编辑2: 更多细节。
ItemsControl
看起来像:(灰色是UserControl
,橙色是ItemsControl
中的项目)
内容在按预期更改Form
/ UserControl
的范围时进行缩放,但ItemsControl
未显示ScrollBar
。
如果我添加ScrollViewer
,则内容不会随着更改边界而缩放,并且可以垂直滚动而不是水平,或者确实会更改项目的宽度以适合UserControll
,具体取决于{{1} }属性。
但我不能让它继续缩放并在ScrollBar
的底部添加一个滚动条。
答案 0 :(得分:0)
您可以尝试执行以下操作:
将控件包装在ScrollViewer中,并将CanContentScrol属性设置为TRUE。
Futhermore将ItemsControl的Panel更改为VirtualizingStackPanel。
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
告诉我们它是否有效或这些变化会带来什么样的新问题。
答案 1 :(得分:0)
经过一整天的研究后,我找到了一个有效的解决方案:
<ItemsControl regions:RegionManager.RegionName="{x:Static statics:ContentRegions.ContentCollection}">
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>