ScrollViewer可调整大小的窗口

时间:2016-04-06 12:51:37

标签: c# wpf scrollviewer

我有一个wpf c#应用程序。 在我的窗口中,我想在打开时以一定的高度开始。但我也想让用户能够调整窗口大小。 我的窗口有一个dockpanel,lastChildFill设置为true。它左边有一棵树,可以选择一个你希望看到它的细节的部分,中间是一个分隔符,右边是该部分的细节(你需要最后一个子填充,这样才能获得所有空间)。 代码如下所示:

 <StackPanel>
    <DockPanel LastChildFill="True" Background="#344755">
        <TextBlock Text="Header" Background="#344755" Foreground="White"/>
    </DockPanel>
    <DockPanel LastChildFill="True" Margin="5">
        <telerik:RadTreeView x:Name="treeV">
                <telerik:RadTreeView.Items>
                    <telerik:RadTreeViewItem Header="General" />
                    <telerik:RadTreeViewItem Header="General2" />
                    <telerik:RadTreeViewItem Header="General3" />
                    <telerik:RadTreeViewItem Header="General4" />
                </telerik:RadTreeView.Items>
            </telerik:RadTreeView>
        <Separator/>
        <Grid >
            <ScrollViewer VerticalScrollBarVisibility="Auto">
                  <ItemsControl>

                         <DockPanel LastChildFill="True"  Margin="5">
                            <Grid  >
                                <TextBlock Text="Something"></TextBlock>
                                <CheckBox  HorizontalAlignment="Right"/>
                           </Grid>
                        </DockPanel>
                        // And many more dock panels
                   </ItemsControl>
            </ScrollViewer>
        </Grid >
    </DockPanel>
</StackPanel>

这是我的问题:如果我没有给第二个停靠面板高度,窗口会自动变大,滚动从不显示。如果我确实给出了高度,那么滚动会显示,但如果用户调整窗口大小,则停靠面板不会调整大小,因此分隔符也不会。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要重新考虑您的布局 一方面,您不需要使用停靠面板来填充可用区域

这里是最常见布局的快速描述

  • StackPanel从上到下或从左到右创建项目列表 装置

  • 网格将项目附加到按网格大小的行和列定义的网格中(统一网格执行相同但行和列设置为均等填充可用空间)

  • Dockpanel使用添加的顺序将项目附加到其边缘 和Dock属性,默认情况下,最后一项设置为填充 中间

  • 距离边缘固定距离的画布位置项

因此,如果你想要w在右边的左边z和x&amp; z,那么控制w,x,y,z Y分享中心

<DockPanel>
    <w DockPanel.Dock="Left" />
    <z DockPanel.Dock="Right" />
    <UniformGrid Columns="2">
        <x/>
        <y/>
    </UniformGrid>
</DockPanel>

如果你想要覆盖屏幕的前1/4和x,y&amp; z要垂直堆叠在剩余的3/4和可滚动的

<Grid>
    <Grid.ColumnDefintions>
        <ColumnDefintion \>
        <ColumnDefintion Width="3*" \>
    <Grid.ColumnDefintions>
    <w/>
    <ScrollViewer>
        <StackPanel>
            <x/>
            <x/>
            <x/>
        </StackPanel>
    </ScrollViewer>
</Grid>

如果布局容器中只有1个项目,则不需要该容器

快速摆弄你上面的代码,它简化了

<DockPanel Background="#344755">
    <TextBlock DockPanel.Dock="Top" Text="Header" Foreground="White"/>
    <TreeView x:Name="treeV">
        <TreeViewItem Header="General" />
        <TreeViewItem Header="General2" />
        <TreeViewItem Header="General3" />
        <TreeViewItem Header="General4" />
    </TreeView>
    <Separator/>
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <ItemsControl>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
                </DataTemplate>
            </ItemsControl.ItemTemplate>

        </ItemsControl>
    </ScrollViewer>
</DockPanel>

或者如果你真的没有一个集合将items控件绑定到

<DockPanel Background="#344755">
    <TextBlock DockPanel.Dock="Top" Text="Header" Foreground="White"/>
    <TreeView x:Name="treeV">
        <TreeViewItem Header="General" />
        <TreeViewItem Header="General2" />
        <TreeViewItem Header="General3" />
        <TreeViewItem Header="General4" />
    </TreeView>
    <Separator/>
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
            <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
            <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
            <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
            <CheckBox  HorizontalAlignment="Right">Something</CheckBox>
            ... 
        </StackPanel>
    </ScrollViewer>
</DockPanel>
相关问题