2012-06-10 16 views
39

Estoy tratando de reducir el tamaño del control de la barra de desplazamiento y hacerlo más "Apple", ya que se ajustaría muy bien a mi interfaz.Barra de desplazamiento de estilo Apple WPF

Lo que estoy tratando de lograr es algo que se parece a esto:

enter image description here

Hasta ahora todo lo que tengo es esta

 <Style TargetType="{x:Type ScrollBar}"> 
      <Setter Property="Stylus.IsFlicksEnabled" Value="True" /> 
      <Setter Property="Background" Value="#8C8C8C" /> 
      <Setter Property="Width" Value="8"/> 
      <Setter Property="MinWidth" Value="8" /> 
     </Style> 

XAML de Trabajo

La implementación puede ser encontrado en Apple Style Scrollbar in WPF

<!--Scrollbar Thumbs--> 
<Style x:Key="ScrollThumbs" TargetType="{x:Type Thumb}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Thumb}"> 
       <Grid x:Name="Grid"> 
        <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Fill="Transparent" /> 
        <Border x:Name="Rectangle1" CornerRadius="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Background="{TemplateBinding Background}" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Tag" Value="Horizontal"> 
         <Setter TargetName="Rectangle1" Property="Width" Value="Auto" /> 
         <Setter TargetName="Rectangle1" Property="Height" Value="7" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!--ScrollBars--> 
<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}"> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="false" /> 
    <Setter Property="Foreground" Value="#8C8C8C" /> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="Width" Value="8" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollBar}"> 
       <Grid x:Name="GridRoot" Width="8" Background="{TemplateBinding Background}"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="0.00001*" /> 
        </Grid.RowDefinitions> 

        <Track x:Name="PART_Track" Grid.Row="0" IsDirectionReversed="true" Focusable="false"> 
         <Track.Thumb> 
          <Thumb x:Name="Thumb" Background="{TemplateBinding Foreground}" Style="{DynamicResource ScrollThumbs}" /> 
         </Track.Thumb> 
         <Track.IncreaseRepeatButton> 
          <RepeatButton x:Name="PageUp" Command="ScrollBar.PageDownCommand" Opacity="0" Focusable="false" /> 
         </Track.IncreaseRepeatButton> 
         <Track.DecreaseRepeatButton> 
          <RepeatButton x:Name="PageDown" Command="ScrollBar.PageUpCommand" Opacity="0" Focusable="false" /> 
         </Track.DecreaseRepeatButton> 
        </Track> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger SourceName="Thumb" Property="IsMouseOver" Value="true"> 
         <Setter Value="{DynamicResource ButtonSelectBrush}" TargetName="Thumb" Property="Background" /> 
        </Trigger> 
        <Trigger SourceName="Thumb" Property="IsDragging" Value="true"> 
         <Setter Value="{DynamicResource DarkBrush}" TargetName="Thumb" Property="Background" /> 
        </Trigger> 

        <Trigger Property="IsEnabled" Value="false"> 
         <Setter TargetName="Thumb" Property="Visibility" Value="Collapsed" /> 
        </Trigger> 
        <Trigger Property="Orientation" Value="Horizontal"> 
         <Setter TargetName="GridRoot" Property="LayoutTransform"> 
          <Setter.Value> 
           <RotateTransform Angle="-90" /> 
          </Setter.Value> 
         </Setter> 
         <Setter TargetName="PART_Track" Property="LayoutTransform"> 
          <Setter.Value> 
           <RotateTransform Angle="-90" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Width" Value="Auto" /> 
         <Setter Property="Height" Value="8" /> 
         <Setter TargetName="Thumb" Property="Tag" Value="Horizontal" /> 
         <Setter TargetName="PageDown" Property="Command" Value="ScrollBar.PageLeftCommand" /> 
         <Setter TargetName="PageUp" Property="Command" Value="ScrollBar.PageRightCommand" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

¿Está bien utilizar este código? (Por ejemplo, en una configuración no libre) – Kian

+2

Todo es código abierto, adelante –

+0

gracias por compartir si puedo usarlo y modificarlo un poco .. – piggy

Respuesta

45

No es muy bonito y honestamente no recuerdo de dónde vino, hay algo similar a lo que buscas en uno de mis proyectos aquí, probablemente haya mucho en el estilo que no se requiere o es incorrecto, pero también puede darle una oportunidad.

<!--Scrollbar Thumbs--> 
     <Style x:Key="ScrollThumbs" TargetType="{x:Type Thumb}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Thumb}"> 
         <Grid x:Name="Grid"> 
          <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Fill="Transparent" /> 
          <Border x:Name="Rectangle1" CornerRadius="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Background="{TemplateBinding Background}" /> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="Tag" Value="Horizontal"> 
           <Setter TargetName="Rectangle1" Property="Width" Value="Auto" /> 
           <Setter TargetName="Rectangle1" Property="Height" Value="7" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <!--ScrollBars--> 
     <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}"> 
      <Setter Property="Stylus.IsFlicksEnabled" Value="false" /> 
      <Setter Property="Foreground" Value="LightGray" /> 
      <Setter Property="Background" Value="DarkGray" /> 
      <Setter Property="Width" Value="10" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ScrollBar}"> 
         <Grid x:Name="GridRoot" Width="19" Background="{TemplateBinding Background}"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="0.00001*" /> 
          </Grid.RowDefinitions> 

          <Track x:Name="PART_Track" Grid.Row="0" IsDirectionReversed="true" Focusable="false"> 
           <Track.Thumb> 
            <Thumb x:Name="Thumb" Background="{TemplateBinding Foreground}" Style="{DynamicResource ScrollThumbs}" /> 
           </Track.Thumb> 
           <Track.IncreaseRepeatButton> 
            <RepeatButton x:Name="PageUp" Command="ScrollBar.PageDownCommand" Opacity="0" Focusable="false" /> 
           </Track.IncreaseRepeatButton> 
           <Track.DecreaseRepeatButton> 
            <RepeatButton x:Name="PageDown" Command="ScrollBar.PageUpCommand" Opacity="0" Focusable="false" /> 
           </Track.DecreaseRepeatButton> 
          </Track> 
         </Grid> 

         <ControlTemplate.Triggers> 
          <Trigger SourceName="Thumb" Property="IsMouseOver" Value="true"> 
           <Setter Value="{DynamicResource ButtonSelectBrush}" TargetName="Thumb" Property="Background" /> 
          </Trigger> 
          <Trigger SourceName="Thumb" Property="IsDragging" Value="true"> 
           <Setter Value="{DynamicResource DarkBrush}" TargetName="Thumb" Property="Background" /> 
          </Trigger> 

          <Trigger Property="IsEnabled" Value="false"> 
           <Setter TargetName="Thumb" Property="Visibility" Value="Collapsed" /> 
          </Trigger> 
          <Trigger Property="Orientation" Value="Horizontal"> 
           <Setter TargetName="GridRoot" Property="LayoutTransform"> 
            <Setter.Value> 
             <RotateTransform Angle="-90" /> 
            </Setter.Value> 
           </Setter> 
           <Setter TargetName="PART_Track" Property="LayoutTransform"> 
            <Setter.Value> 
             <RotateTransform Angle="-90" /> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="Width" Value="Auto" /> 
           <Setter Property="Height" Value="12" /> 
           <Setter TargetName="Thumb" Property="Tag" Value="Horizontal" /> 
           <Setter TargetName="PageDown" Property="Command" Value="ScrollBar.PageLeftCommand" /> 
           <Setter TargetName="PageUp" Property="Command" Value="ScrollBar.PageRightCommand" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+1

¡Gracias por eso, me da un excelente punto de partida! –

+0

También he actualizado mi pregunta para que contenga una versión modificada de su código para que se parezca a lo que necesito. –

+0

Siento mucho poder dar un voto positivo .. – Sayka

Cuestiones relacionadas