2009-11-03 7 views
18

Ich möchte meinen GridSplitter wie hinzufügen von Punkten auf (wie auf http://msdn.microsoft.com/en-us/library/aa970265.aspx gefunden).Styling GridSplitter wpf C#

Ich möchte auch Rasterspalter Farbe auf mouseOver ändern, oder Aero Theme anwenden.

<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

Geben Sie Beispielcode ... nicht den ganzen Code, weil es zu groß ist –

+1

Ich glaube wirklich nicht, dass down Wähler sollten nichts darüber wissen. Sie verstehen einfach nicht aufgrund ihres Mangels an Wissen: p –

Antwort

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> 

Sie können auch Bild von Msnd Microsoft speichern den gleichen Effekt zu erhalten, More Info

+0

Nicht sicher, was dieses "Bild" sein soll .. der gebrochene Bild-Link verweist auf eine tatsächliche MSDN-Seite. Ich weiß, das ist eine alte Antwort, aber zögern Sie nicht, den Link trotzdem zu korrigieren (mit stack.imgur Uploader?). –

29

Vor allem für meine eigene Zukunft, hier ist ein vertikaler Rasterteiler, den die abgerundete Form eines Knopfes hat (aber nicht reagiert nicht richtig auf Mouseover):

<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> 

Ein Waagrechtspalter könnte nur verwenden „····“, wie der Inhalt der Schaltfläche.

+0

Das sieht einfach und sehr sauber aus! – Enrico

+1

Danke dafür. Ich habe am Ende "▌▌▌▌▌▌" als Inhalt für einen horizontalen Splitter verwendet, der IMHO etwas besser aussieht als "···". –

1

Eine andere Möglichkeit, einen 'Gripper'-Button/Grafik in einen GridSplitter einzufügen, ohne Mausereignisse zu verlieren, wäre eine einfache Beschriftung oben auf dem Splitter.

<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"/> 

Sicherstellen, dass das Gridsplitter und Etikett in der gleichen Spalte ist, und dass IsHitTestVisible = False wird im Label-Set.