ScrollViewer改变内容(ItemControl)的大小,而不是显示滚动条。

10 浏览
0 Comments

ScrollViewer改变内容(ItemControl)的大小,而不是显示滚动条。

我有一个包含ItemsControl的WPF UserControl,其中ItemsPanel是一个水平的StackPanel(基本上是一种WinRT Hub Control)。内容扩展了UserControl的大小。

如果我尝试在我的ItemsControl周围添加一个ScrollViewerScrollViewer会缩小ItemsControl,使所有项目都适应UserControl的边界。

这与我预期的完全相反,有人可以告诉我为什么ScrollViewer会表现出这种方式吗?

这是我的

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">

项目是通过Prism RegionManager注入的。

编辑1:

被注入到我的MainForm中。它被分配给 => ShellRegions.Content(第三个)。

编辑2:

一些更多的细节。

看起来像:this(灰色是,橙色是中的项目)

当改变<表单>/的边界时,内容按预期进行缩放,但不显示

如果我添加一个,内容就不再随着边界的改变而缩放,而是垂直滚动,或者根据的属性改变项目的宽度以适应

但我无法使其保持缩放并在底部添加一个滚动条。

0
0 Comments

问题的原因是ItemsControl的内容超出了可见区域,但是默认情况下,ScrollViewer会调整内容的大小以适应可见区域,而不是显示滚动条。解决方法是将ItemsControl放置在ScrollViewer中,并设置ScrollViewer的HorizontalScrollBarVisibility属性为Auto,VerticalScrollBarVisibility属性为Disabled,这样就可以显示滚动条了。

具体解决方法的代码如下:


    
        
            
                
            
        
    
    
        
            
        
    

通过将ItemsControl的模板设置为上述代码中的ControlTemplate,并将ItemsControl放置在ScrollViewer中,再设置ScrollViewer的滚动条可见性属性,就可以解决问题,并显示滚动条。

0
0 Comments

问题的原因是没有正确设置ScrollViewer的属性,导致它改变了内容(ItemControl)的大小而不是显示滚动条。解决方法是将控件包裹在ScrollViewer中,并将CanContentScroll属性设置为True。另外,将ItemsControl的Panel属性更改为VirtualizingStackPanel。需要注意的是,这些更改可能会引入新的问题,需要测试是否有效。

以下是一个示例代码:


    
        
            
                
            
        
        
        
        
    

如果这些方法都没有解决问题,请确保ScrollViewer已正确添加在代码中。

0