zoukankan      html  css  js  c++  java
  • GridSplitter用法

    1.GridSplitter的ShowsPreview设置为True时拖动报null错误

    解决方法在Grid外面包装一个装饰器:AdornerDecorator,至于为什么这么做,暂时还不知道

    2.当ShowsPreview设置为True时,可以设置鼠标拖动的时候动态效果,具体方法是设置PreviewStyle

    另外这个PreviewStyle的TargetType只针对Control的,因为在GridSplitter类定义上有StyleTypedPropertyAttribute

     <GridSplitter Grid.Row="0" Height="28"
                                              VerticalAlignment="Bottom"
                                              ShowsPreview="True"
                                              HorizontalAlignment="Stretch"
                                              Background="Transparent">
                                        <GridSplitter.PreviewStyle>
                                            <Style TargetType="Control">
                                                <Setter Property="Template">
                                                    <Setter.Value>
                                                        <ControlTemplate TargetType="Control">
                                                            <Rectangle Height="3" Fill="#808080"/>
                                                        </ControlTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </Style>
                                        </GridSplitter.PreviewStyle>
                                    </GridSplitter>
    View Code

    3.有时拖动的时候会出现鼠标拖动超出了边界的效果,出现这个的问题是由于没有设置Grid的行或者列的最大最小值,当设置好这个最大最小值后就没有问题了:

     <Grid.RowDefinitions>
                                        <RowDefinition Height="*" MinHeight="140"></RowDefinition>
                                        <RowDefinition Height="64" MinHeight="64" MaxHeight="250"></RowDefinition>
                                </Grid.RowDefinitions>
    View Code

    另外需要注意:在设置时最好是第一行的最小值+第二行的最大值小于总的高度,这样在拖动的时候边界的效果是最好的

    假如Grid的高度是500,第一行的最小高度是150,那么第二行的最大高度就设置为<=350

    4.如何设置GridSplitter时左右拖动还是上下拖动,可以设置ResizeBehavior属性

    ResizeBehavior属性默认是GridResizeBehavior.BasedOnAlignment。这个枚举值,简而言之:如果HorizontalAlignment或VerticalAlignment是Center或者Stretch的话,GridSplitter的移动会改变相邻两个区域块(这里的相邻,如果GridSplitter是横向的话,是指上下两个区域。如果GridSplitter是纵向的话,是指左右两块区域,其中VerticalAlignment控制纵向,HorizontalAlignment控制横向)。如果是HorizontalAlignment或VerticalAlignment的其他值,则GridSplitter的移动会改变当前区域和相邻的一个区域的大小。具体相邻的哪个区域,跟Alignment值对应。

    当然GridResizeBehavior的其他值:CurrentAndNext,PreviousAndCurrent,PreviousAndNext。可以直接控制需要改变大小的两个区域。

    不过在一般情况下,我们只需要保留ResizeBehavior的默认值,并设置GridSplitter的对其为Stretch或Center就可以完成普通需求了。或者将相邻区域块的大小设置为GridLength.Auto。

    注意FrameworkElement的HorizontalAlignment和VerticalAlignment默认是Stretch,但是GridSplitter的HorizontalAlignment被改写为Right。

    文章参考:https://www.mgenware.com/blog/?p=45

  • 相关阅读:
    树链剖分
    NOI2015 软件包管理器(树链剖分+线段树)
    9.11NOIP模拟题
    9.10NOIP模拟题
    bzoj1121[POI2008]激光发射器SZK(结论)
    9.9 NOIP模拟题
    树形dp
    P1272 重建道路(树形dp)
    Codeforces Round #419 (Div. 2)
    9.2NOIP模拟题
  • 原文地址:https://www.cnblogs.com/sczmzx/p/5209221.html
Copyright © 2011-2022 走看看