将GridView拉伸到父控件边界

时间:2014-05-27 13:13:06

标签: c# wpf wpf-controls

我有一个自定义控件,我将SemanticZoom与GridView放在一起。 问题是如果GridView只显示很少的项目,那么SemanticZoom的宽度小于容器的宽度。结果放大\ out按钮被错误地放在屏幕中间。

如果要显示的项目很多,那么GridView会将其自身延伸到父控件边界,一切正常。

如果内部只有少数项目,如何正确拉伸语义缩放(或内部GridView)? enter image description here

自定义容器代码:

<controls:DataLoader Grid.RowSpan="2" >
                <controls:DataLoader.DataContent>
                    <SemanticZoom x:Name="SemanticZoom"  Style="{StaticResource SemanticZoomStyle}"  Margin="0,0,0,0" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
                        <SemanticZoom.ZoomedOutView>
                            ..skipped..
                        </SemanticZoom.ZoomedOutView>

                        <SemanticZoom.ZoomedInView>
                            <GridView x:Name="ZoomedInView"
                                ItemsSource="{Binding Source={StaticResource GroupedPatients}}" 
                                      ItemTemplate="{StaticResource PatientItemTemplate}" 
                                      Style="{StaticResource DataGridViewStyle}"
                                      behaviors:SelectionChangedCommandBehavior.Command="{Binding SelectPatientCommand}" Margin="0,0,0,0" 
                                      HorizontalAlignment="Stretch"  HorizontalContentAlignment="Stretch"
                                      Background="Yellow">


                                <GridView.GroupStyle>
                                    <GroupStyle HeaderTemplate="{StaticResource PatientItemGroupHeaderTemplate}">
                                        <GroupStyle.Panel>
                                            <ItemsPanelTemplate>
                                                <VariableSizedWrapGrid Orientation="Vertical"/>
                                            </ItemsPanelTemplate>
                                        </GroupStyle.Panel>
                                    </GroupStyle>
                                </GridView.GroupStyle>
                            </GridView>
                        </SemanticZoom.ZoomedInView>
                    </SemanticZoom>
                </controls:DataLoader.DataContent>

GridView风格:

<Style x:Key="DataGridViewStyle" TargetType="GridView">
    <Setter Property="IsItemClickEnabled" Value="True"/>
    <Setter Property="SelectionMode" Value="None"/>
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="Width" Value="Auto"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Margin" Value="0"/>
</Style>
            </controls:DataLoader>

1 个答案:

答案 0 :(得分:0)

正确的解决方案是使用Grid而不是GridView