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>
3.有時拖動的時候會出現鼠標拖動超出了邊界的效果,出現這個的問題是由於沒有設置Grid的行或者列的最大最小值,當設置好這個最大最小值后就沒有問題了:

<Grid.RowDefinitions> <RowDefinition Height="*" MinHeight="140"></RowDefinition> <RowDefinition Height="64" MinHeight="64" MaxHeight="250"></RowDefinition> </Grid.RowDefinitions>
另外需要注意:在設置時最好是第一行的最小值+第二行的最大值小於總的高度,這樣在拖動的時候邊界的效果是最好的
假如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