2016-07-25 10 views
0

ich für einen Apfel wie Scrollbar den folgenden Stil bin mit: WPF Scrollbar Stil

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

Es sieht gut aus, das einzige Problem ist, wenn beide Bildlaufleisten sind in Aktion, gibt es einen rechteckigen Fleck, der nicht mit dem Rest des Designs geht. Ich bin mir nicht sicher, woher das kommt oder welche Stiländerungen ich machen muss. Wie Sie unten sehen können: unwanted white rectangle

Es gibt ein weißes Rechteck an der Ecke, wo sich zwei Bildlaufleisten treffen ... Ich will das nicht oder möchte zumindest kontrollieren können, wie dieses Rechteck aussieht. Welche Stiländerungen sollte ich vornehmen?

+0

Haben Sie versucht, die 'Hintergrund'-Farbe des Elements, das Ihre' ScrollBar's enthält, auf die gleiche Farbe wie den 'ScrollBar.Background' zu setzen? – Meloviz

+0

Die ScrollBar-Dimensionen eines 'ScrollViewer' werden in ihren Vorlagen auf die jeweiligen' Viewport'-Größen eingestellt (z. B. 'ViewportHeight' für den vertikalen). Diese Größe subtrahiert die Breite oder Höhe der anderen 'ScrollBar', sodass Sie immer ein kleines Quadrat in dieser Ecke haben. – Meloviz

Antwort

0

Mit dieser Antwort von @Anonymous Coward können Sie die Vorlage selbst von einem ScrollViewer betrachten und sehen, was ich in meinen Kommentaren gesagt habe. Tun Sie einfach so etwas wie:

using(FileStream stream = new FileStream("ScrollViewerTemplate.xml")) 
using(StreamWriter writer = new StreamWriter(stream)) 
{ 
    writer.WriteLine(System.Windows.Markup.XamlWriter.Save(
     new ScrollViewer() {Content = new TextBlock() {Text = "Template"}})); 
} 

Sie können ein wenig Bearbeitung zu tun haben (fügen Sie in den Zeilenumbrüche), aber Sie werden den Kern erhalten. Das wird Ihnen zeigen, dass ScrollBar s Vorlage gebunden sind an die ScrollViewerViewportHeight/ViewportWidth, die, wie Sie daraus schließen können, ist die Größe des sichtbaren Inhalts, der keine ScrollBar s enthält.

Also, all das gegeben, würde ich vorschlagen, dass dieser Block inline mit Ihrem Design zu halten, ändere nur das darin enthaltene Element ist (vielleicht ist es ein ScrollViewer?) Background die von den ScrollBar ‚s Hintergründen.