2009-11-03 45 views
18

我想像我的GridSplitter樣式添加點(如在http://msdn.microsoft.com/en-us/library/aa970265.aspx找到)。造型GridSplitter wpf C#

我也想更改mouseOver上的gridsplitter顏色,或應用Aero主題。

<Style x:Key="GridSplitterStyle1" TargetType="{x:Type GridSplitter}"> 
    <Setter Property="Background" 
      Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
    <Setter Property="PreviewStyle"> 
    <Setter.Value> 
     <Style> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
      <ControlTemplate> 
       <Rectangle Fill="#80000000"/> 
      </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     </Style> 
    </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type GridSplitter}"> 
     <Border Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}"/> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

<!--Theme--> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary 
    Source="/RibbonControlsLibrary;component/Themes/Office2007Blue.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

<GridSplitter x:Name="gridSplitterTreeNodes" Width="10" 
       BorderThickness="1,0" Cursor="SizeWE" 
       RenderTransformOrigin="-1.2,0.507" ShowsPreview="True" 
       Style="{DynamicResource GridSplitterStyle1}"> 
    <GridSplitter.Background> 
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
     <GradientStop Color="#FFE3EFFF" Offset="0"/> 
     <GradientStop Color="#FFAFD2FF" Offset=".45"/> 
    </LinearGradientBrush> 
    </GridSplitter.Background> 
</GridSplitter> 
+0

給你示例代碼...不張貼整個代碼,因爲它太大了 – 2009-11-03 07:33:19

+1

我真的不這麼認爲選民應該知道關於它的任何事情。他們只是不明白,因爲他們缺乏知識:p – 2011-07-15 04:21:31

回答

16
<GridSplitter x:Name="gridSplitterTreeNodes" Width="5" BorderThickness="1,0" 
    Cursor="SizeWE" RenderTransformOrigin="-1.2,0.507" ShowsPreview="True" 
    Style="{DynamicResource GridSplitterStyle1}"> 
    <GridSplitter.Background> 
    <ImageBrush ImageSource="Images\gripDots.png" TileMode="FlipXY" 
       Stretch="UniformToFill"/> 
    </GridSplitter.Background> 
</GridSplitter> 

您還可以保存從MSND微軟圖像來獲得同樣的效果,More Info

+0

不知道該「圖片」應該是什麼..破碎的圖像鏈接指向一個實際的MSDN頁面。我知道這是一箇舊的答案,但隨時修復鏈接(與stack.imgur上傳?)。 – 2016-11-04 21:01:51

29

主要是爲我自己的未來的參考,在這裏是有一個按鈕的圓形形狀的垂直網格分路器(但不會對鼠標懸停作出反應):

<GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="8"> 
    <GridSplitter.Template> 
     <ControlTemplate TargetType="{x:Type GridSplitter}"> 
      <Grid> 
       <Button Content="⁞" /> 
       <Rectangle Fill="#00FFFFFF" /> 
      </Grid> 
     </ControlTemplate> 
    </GridSplitter.Template> 
</GridSplitter> 

水平分離器只能使用「····」作爲Button的內容。

+0

這看起來很簡單,很乾淨! – Enrico 2013-04-24 08:33:12

+1

謝謝你。我最終使用「▌▌▌▌▌▌」作爲水平分離器的內容,其中IMHO看起來比「····」好一些。 – 2014-11-14 07:27:11

1

向GridSplitter添加「抓手」按鈕/圖形而不丟失鼠標事件的另一種方法是在分離器上使用簡單的標籤。

<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" Background="Gray"/> 

    <Label Grid.Column="1" Content="⁞" Foreground="White" VerticalAlignment="Center" FontSize="26" FontWeight="Bold" IsHitTestVisible="False"/> 

確保了GridSplitter和標籤是在同一列,而IsHitTestVisible =假的標籤設置。