2009-11-03 15 views
18

chcę projektować moje GridSplitter jak dodanie kropki na nim (jak ustalono w http://msdn.microsoft.com/en-us/library/aa970265.aspx).Styling GridSplitter WPF C#

Chcę też zmienić kolor GridSplitter po najechaniu myszą, lub zastosować 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

Dając przykładowy kod ... nie delegowania cały kod, ponieważ jest zbyt duży –

+1

I naprawdę nie sądzę, że wyborcy w dół powinien wiedzieć niczego o nim. Oni po prostu nie rozumieją z powodu braku wiedzy: p –

Odpowiedz

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> 

Można również zapisywać obraz z Msnd Microsoft, aby uzyskać ten sam efekt, More Info

+0

Nie jestem pewien, co to ma być "zdjęcie" .. link zepsuty obraz wskazuje na rzeczywistą stronę MSDN. Wiem, że to stara odpowiedź, ale mimo to możesz naprawić ten link (za pomocą uploadera stack.imgur?). –

29

głównie dla własnej przyszłości, tutaj jest pionowa splitter siatka, która ma zaokrąglony kształt guzika (ale nie reaguje prawidłowo 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> 

pozioma splitter może po prostu użyć „····” jak zawartość przycisku.

+0

To wygląda łatwo i bardzo czysto! – Enrico

+1

Dzięki za to. Skończyło się na użyciu "▌▌▌▌▌▌" jako treści dla rozdzielacza poziomego, który IMHO wygląda nieco lepiej niż "····". –

1

Innym sposobem na dodanie przycisku „chwytaka”/grafiki do GridSplitter, bez utraty zdarzeń myszy, byłoby użyć prostego etykietę w górnej części rozdzielacza.

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

Making czy GridSplitter i etykiet znajdują się w tej samej kolumnie, a IsHitTestVisible = False ustawiony jest na etykiecie.