ScrollViewer中的RadGridView会拉伸屏幕

时间:2012-04-18 18:33:15

标签: wpf xaml expression-blend scrollviewer radgridview

我有一个我正在造型的应用程序,它的默认大小是1440x900。如果应用程序的大小调整小于此值,我希望用户能够向上和向下滚动。

我尝试围绕应用程序的主网格控件包装ScrollView控件,它似乎工作。但是,应用程序有很多页面,每当我导航到其中包含RadGridView控件的页面时,RadGridView的列都会从页面中展开。

我知道这是由ScrollView控件引起的,因为它基本上让RadGridView增长到它想要的大小。

有没有办法阻止RadGridView控件拉伸不停?

2 个答案:

答案 0 :(得分:1)

Telerik RadGridView控件允许行和列虚拟化,其中控件将回收用于网格的每个单元格的控件。这减少了网格的内存使用量,并使其在大量数据时表现更好。启用虚拟化并且网格不足以显示其包含的所有数据时,网格将提供自己的滚动条

为了实现虚拟化,RadGridView控件需要具有有界宽度和高度。将RadGridView放在ScrollViewer中会给它带来无限的宽度和高度,从而禁用虚拟化。我的建议是使用MaxWidthMaxHeight属性绑定网格的宽度和高度,然后将网格从已包装好的ScrollViewer中取出。行和列虚拟化使用RadGridView控件的EnableRowVirtualizationEnableColumnVirtualization属性启用,但我似乎记得默认情况下这两个都是True

免责声明:我没有使用Telerik控件的WPF版本,只使用Silverlight版本。两者都来自相同的代码库,所以他们的行为应该是相似的。

答案 1 :(得分:0)

默认情况下,如果没有足够的空间显示内容,RadGridView控件将自动放入滚动条,以便水平和垂直滚动它的行。你是对的,ScrollViewer只是让RadGridView确定它自己的大小不受约束,因此它将填充宽度以容纳它的所有列,以及容纳所有行的高度。

希望 RadGridView被它的容器约束,所以你要把它放到一个网格单元中(除非它应该占用整个视图)。您不应在RadGridView上设置任何宽度或高度,因为您希望将它们设置为自动(默认)以适当增大或缩小。这听起来像其他东西可能会阻碍它,所以我建议你发布一些代码。

这是我的RadGridView,它可以填充容器并按您的需要滚动。请注意,我已经覆盖了行定义并使用了自定义用户控件,这根本不会影响滚动。

 <telerik:RadGridView ItemsSource="{Binding Shipments}" RowStyle="{StaticResource rowStyle}" 
                            RowDetailsVisibilityMode="Collapsed"
                            RowIndicatorVisibility="Collapsed"
                            CanUserDeleteRows="False"
                            CanUserInsertRows="False" 
                            CanUserSelect="False" telerik:StyleManager.Theme="Windows7" />

这是我的自定义rowtemplate(在我的本地resourcedictionary中):

<ControlTemplate x:Key="MyCustomRowTemplate" TargetType="telerik:GridViewRow">
            <Border x:Name="rowsContainer" BorderBrush="#FFA0AFC3" BorderThickness="0,0,0,1" >
                <Grid Width="Auto" HorizontalAlignment="Stretch">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <view:ActiveReleaseItemView DataContext="{Binding}" />
                </Grid>
            </Border>
</ControlTemplate>
<Style x:Key="rowStyle" TargetType="telerik:GridViewRow">
     <Setter Property="Template" Value="{StaticResource MyCustomRowTemplate}" />
</Style>