WPF:关于GridSplitter的一些说明

WPF:关于GridSplitter的一些说明,第1张

概述目录 1. ShowsPreview和PreviewStyle属性 2. ResizeBehavior属性 3. 跨行/列的GridSplitter 4. GridSplitter和Grid的SharedSizeScope 5. GridSplitter的ControlTemplate:颜色变换GridSplitter   返回目录 1. ShowsPreview和PreviewStyle属性 默

目录

1. ShowsPreview和PreviewStyle属性 2. ResizeBehavior属性 3. 跨行/列的GridSplitter 4. GridSplitter和Grid的SharedSizeScope 5. GridSplitter的ControlTemplate:颜色变换GridSplitter

 

返回目录 1. ShowsPrevIEw和PrevIEwStyle属性

默认情况下,GrIDSplitter的ShowsPrevIEw属性是false,这样的话,当用鼠标移动GrIDSplitter时,GrIDSplitter会立即改变相邻GrID结构的大小,如果ShowsPrevIEw为true的话,鼠标移动GrIDSplitter并不会直接改变GrID的内部大小,而是在移动一个虚拟分割线,但鼠标释放后,新的大小才会被应用。

 

当然通过PrevIEwStyle可以自定义这个虚拟分割线的样式,另外这个PrevIEwStyle的targettype只针对Control的,因为在GrIDSplitter类定义上有StyleTypedPropertyAttribute:

[StyleTypedProperty(Property = "PrevIEwStyle",Styletargettype = typeof(Control))]

public class GrIDSplitter : Thumb

{ }

 

所以PrevIEwStyle可以这样定义:

<GrIDSplitter WIDth="5" GrID.Column="1"

             Background="red" HorizontalAlignment="Center"

             ShowsPrevIEw="True">

    <GrIDSplitter.PrevIEwStyle>

        <Style targettype="Control">

            <Setter Property="Template">

                <Setter.Value>

                    <ControlTemplate targettype="Control">

                        <Rectangle stroke="Navy"

                                  strokeDashArray="2"

                                  strokeThickness="1"

                                  Fill="YellowGreen"/>

                    </ControlTemplate>

                </Setter.Value>

            </Setter>

        </Style>

    </GrIDSplitter.PrevIEwStyle>

</GrIDSplitter>

 

结果:

 

 

返回目录 2. 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。

(也可以参考MSDN更详细的解释:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.gridresizebehavior.aspx)

 

 

返回目录 3. 跨行/列的GrIDSplitter

对于多行/列的GrID用到GrIDSplitter,只需要用GrID.rowspan或ColumnSpan附加属性来使GrIDSplitter跨越多行/列就可以了。

代码:

<GrID>

    <GrID.RowDeFinitions>

        <RowDeFinition/>

        <RowDeFinition/>

    </GrID.RowDeFinitions>

    <GrID.ColumnDeFinitions>

        <ColumnDeFinition/>

        <ColumnDeFinition WIDth="auto"/>

        <ColumnDeFinition/>

    </GrID.ColumnDeFinitions>

    <GrIDSplitter WIDth="5" GrID.Column="1"

                  Background="red" HorizontalAlignment="Center"

                  ShowsPrevIEw="True"

                  GrID.rowspan="2" />

    <button/>

    <button GrID.Column="2" GrID.Row="2"/>

</GrID>

 

 

返回目录 4. GrIDSplitter和GrID的SharedSizeScope

 

通过GrID的SharedSizeScope,可以使两个GrID的行或者列保持相同的大小,连同使用GrIDSplitter可以轻松做出一种ListVIEw的Detailed VIEw的效果。

代码:

<GrID GrID.IsSharedSizeScope="True">

    <GrID.RowDeFinitions>

        <RowDeFinition Height="auto"/>

        <RowDeFinition/>

    </GrID.RowDeFinitions>

    <GrID>

        <GrID.ColumnDeFinitions>

            <ColumnDeFinition SharedSizeGroup="group" WIDth="auto"/>

            <ColumnDeFinition WIDth="auto"/>

            <ColumnDeFinition WIDth="auto"/>

        </GrID.ColumnDeFinitions>

 

        <GrIDSplitter WIDth="5"

                     GrID.Column="1"

                     Background="red"

                     HorizontalAlignment="Center"

                     VerticalAlignment="Stretch"

                     ResizeDirection="Columns"/>

        <TextBlock Text="列1"/>

        <TextBlock GrID.Column="2"

                  Text="列2"/>

    </GrID>

 

    <ListBox GrID.Row="1">

        <ListBox.ItemTemplate>

            <DataTemplate>

                <GrID ShowGrIDlines="True">

                    <GrID.ColumnDeFinitions>

                        <ColumnDeFinition SharedSizeGroup="group"/>

                        <ColumnDeFinition/>

                    </GrID.ColumnDeFinitions>

                    <TextBlock Text="{Binding}"

                              margin="5"/>

                    <TextBlock GrID.Column="1"

                              Text="{Binding}"

                              margin="5"/>

                </GrID>

            </DataTemplate>

        </ListBox.ItemTemplate>

 

        <ListBox.ItemsSource>

            <x:Array xmlns="clr-namespace:System;assembly=mscorlib"

                   Type="{x:Type String}">

                <String>liu Yuan Yuan</String>

                <String>DavID Martin</String>

                <String>Tony</String>

            </x:Array>

        </ListBox.ItemsSource>

    </ListBox>

</GrID>

 

 

返回目录 5. GrIDSplitter的ControlTemplate:颜色变换GrIDSplitter

GrIDSplitter继承与Thumb,后者又继承与Control。因此GrIDSplitter的控件样式设计和Thumb差不多,属于那种最基础的样式,比如我的这个颜色变换的GrIDSplitter。

 

代码:

<GrID>

    <GrID.ColumnDeFinitions>

        <ColumnDeFinition WIDth="auto" MinWIDth="100"/>

        <ColumnDeFinition WIDth="auto"/>

        <ColumnDeFinition WIDth="auto"/>

    </GrID.ColumnDeFinitions>

    <GrIDSplitter GrID.Column="1"

                 WIDth="30"

                  >

        <GrIDSplitter.Template>

            <ControlTemplate targettype="GrIDSplitter">

                <Rectangle name="rect" Fill="YellowGreen" stroke="Black" strokeThickness="4" strokeDashArray="4" />

                <ControlTemplate.Triggers>

                    <EventTrigger RoutedEvent="MouseEnter">

                        <BeginStoryboard>

                            <Storyboard>

                                <colorAnimation Storyboard.Targetname="rect"

                                               Storyboard.TargetProperty="Fill.color"

                                               From="YellowGreen"

                                               To="Pink"

                                               autoReverse="True"

                                               RepeatBehavior="Forever"

                                               Duration="0:0:0.5"/>

                            </Storyboard>

                        </BeginStoryboard>

                    </EventTrigger>

                    <EventTrigger RoutedEvent="MouseLeave">

                        <BeginStoryboard>

                            <Storyboard>

                                <colorAnimation Storyboard.Targetname="rect"

                                               Storyboard.TargetProperty="Fill.color"

                                               Duration="0:0:0.5"/>

                            </Storyboard>

                        </BeginStoryboard>

                    </EventTrigger>

                </ControlTemplate.Triggers>

            </ControlTemplate>

        </GrIDSplitter.Template>

    </GrIDSplitter>

</GrID>

总结

以上是内存溢出为你收集整理的WPF:关于GridSplitter的一些说明全部内容,希望文章能够帮你解决WPF:关于GridSplitter的一些说明所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1017202.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存