
目录
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的一些说明所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)