2009-11-03 24 views
18

quiero darle un estilo a mi GridSplitter como agregarle puntos (como se encuentra en http://msdn.microsoft.com/en-us/library/aa970265.aspx).Styling GridSplitter wpf C#

también quiero cambiar el color del divisor de grillas en mouseOver, o aplicar Aero Theme.

<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

Proporcionándole el código de muestra ... no publicando el código completo porque es demasiado grande –

+1

Realmente no creo que los votantes condenados deban saber nada al respecto. Simplemente no entienden debido a su falta de conocimiento: p –

Respuesta

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> 

También puede guardar la imagen de MSND Microsoft para obtener el mismo efecto, More Info

+0

No estoy seguro de qué se supone que es esa "imagen" ... el enlace de la imagen está apuntando a una página real de MSDN. Sé que esta es una respuesta antigua, pero no dudes en corregir el enlace de todos modos (con stack.imgur uploader?). –

29

Sobre todo para mi propia referencia en el futuro, aquí es un divisor de rejilla vertical que tiene la forma redondeada de un botón (pero no reacciona a pasar el ratón correctamente):

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

Un divisor horizontal justo podría utilizar "····", como contenido del botón.

+0

¡Esto parece fácil y muy limpio! – Enrico

+1

Gracias por esto. Terminé usando "▌▌▌▌▌▌" como contenido para un divisor horizontal, que en mi humilde opinión parece un poco mejor que "····". –

1

Otra forma de agregar un botón/gráfico 'gripper' a un GridSplitter, sin perder los eventos del mouse, sería usar una etiqueta simple en la parte superior del divisor.

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

Asegurarse de que el GridSplitter y etiqueta están en la misma columna, y que IsHitTestVisible = False se encuentra en la etiqueta.