ScrollViewer更改内容大小(ItemControl)而不是显示滚动条

时间:2013-10-29 15:45:27

标签: c# wpf size scrollviewer

我有一个WPF UserControl包含ItemsControl,其水平StackPanelItemsPanel(基本上是某种WinRT Hub控件)。内容扩展了UserControl的大小

如果我尝试在ScrollViewer周围添加ItemsControlScrollViewer会缩小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看起来像:this(灰色是UserControl,橙色是ItemsControl中的项目) 内容在按预期更改Form / UserControl的范围时进行缩放,但ItemsControl未显示ScrollBar。 如果我添加ScrollViewer,则内容不会随着更改边界而缩放,并且可以垂直滚动而不是水平,或者确实会更改项目的宽度以适合UserControll,具体取决于{{1} }属性。

但我不能让它继续缩放并在ScrollBar的底部添加一个滚动条。

2 个答案:

答案 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>