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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM