Probleme mit Scrollbar

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Probleme mit Scrollbar

    Hallo (mal wieder).

    Ich versuche mich gerade daran, eine Scrollbar mit einem eigenen Style zu versehen. Der bisherige XAML-Code sieht so aus:
    Spoiler anzeigen

    XML-Quellcode

    1. <Style x:Key="ScrollBarPageButton" TargetType="{x:Type RepeatButton}">
    2. <Setter Property="SnapsToDevicePixels" Value="True"/>
    3. <Setter Property="OverridesDefaultStyle" Value="true"/>
    4. <Setter Property="IsTabStop" Value="false"/>
    5. <Setter Property="Focusable" Value="false"/>
    6. <Setter Property="Template">
    7. <Setter.Value>
    8. <ControlTemplate TargetType="{x:Type RepeatButton}">
    9. <Rectangle Fill="{TemplateBinding Background}"/>
    10. </ControlTemplate>
    11. </Setter.Value>
    12. </Setter>
    13. </Style>
    14. <Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
    15. <Setter Property="SnapsToDevicePixels" Value="True"/>
    16. <Setter Property="OverridesDefaultStyle" Value="true"/>
    17. <Setter Property="IsTabStop" Value="false"/>
    18. <Setter Property="Focusable" Value="false"/>
    19. <Setter Property="Template">
    20. <Setter.Value>
    21. <ControlTemplate TargetType="{x:Type Thumb}">
    22. <Rectangle Fill="{TemplateBinding Background}"/>
    23. </ControlTemplate>
    24. </Setter.Value>
    25. </Setter>
    26. </Style>
    27. <Style x:Key="VolumeScrollBarStyle" TargetType="{x:Type ScrollBar}">
    28. <Setter Property="OverridesDefaultStyle" Value="true"/>
    29. <Setter Property="Width" Value="11"/>
    30. <Setter Property="Template">
    31. <Setter.Value>
    32. <ControlTemplate TargetType="{x:Type ScrollBar}">
    33. <Grid>
    34. <Track>
    35. <Track.IncreaseRepeatButton>
    36. <RepeatButton Background="#FFD4D4D4" Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageUpCommand"/>
    37. </Track.IncreaseRepeatButton>
    38. <Track.Thumb>
    39. <Thumb Background="Black" Style="{StaticResource ScrollBarThumb}"/>
    40. </Track.Thumb>
    41. <Track.DecreaseRepeatButton>
    42. <RepeatButton Background="#FF4617B5" Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageDownCommand"/>
    43. </Track.DecreaseRepeatButton>
    44. </Track>
    45. </Grid>
    46. </ControlTemplate>
    47. </Setter.Value>
    48. </Setter>
    49. </Style>
    Das Aussehen verändert sich auch nach meinen Vorstellungen, allerdings gibt es ein Problem: jede Scrollbar, der ich den Style verpasse, lässt sich nicht mehr scrollen.
    Ist bestimmt irgend ne Kleinigkeit, aber ich bekomms einfach nicht hin. Sieht jemand den Fehler?
    Ich habe mir den Code nicht wirklich intensiv angesehen. Jedoch als ich noch viel mit WPF gearbeitet habe, habe ich die Progressbar immer durch Templates gestylt.
    Du musst dabei darauf achten, dass du die verschiedenen Parts auch richtig bennenst. Wie diese heißen siehst du hier msdn.microsoft.com/en-us/libra…controls.progressbar.aspx in der Deklaration:

    Quellcode

    1. [TemplatePartAttribute(Name = "PART_Indicator", Type = typeof(FrameworkElement))]
    2. [TemplatePartAttribute(Name = "PART_GlowRect", Type = typeof(FrameworkElement))]
    3. [TemplatePartAttribute(Name = "PART_Track", Type = typeof(FrameworkElement))]
    4. public class ProgressBar : RangeBase


    Versuch mal dadurch zu stylen. Ansonsten müsstest du doch garantiert jede Menge Beispiele finden können.

    Aber ich glaube weniger, dass es daran liegt. Vll. kann dir da jemand helfen der noch aktiv wirklich mit WPF arbeitet.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Oh dann konnte ich doch helfen(dachte schon ich hab irgend ne scheiße erzählt :P). Das sind halt alles noch so feinheiten. Du brauchst die Namen da du wenn du ein Control schreibst die OnTemplateChanged-Methode überschreiben muss(hoffentlich stimmt der Name). Hast du in deinem Control fixe Teile welche du im Codebehind ansprichst, so musst du natürlich diese aus dem Template extrahieren können um diese verwenden zu können. Und da kommen eben die Namen ins Spiel, da über diese Namen welche immer ein PART_ vorne dran haben die OnTemplateChanged-Methode im Template die jeweiligen Controls sucht. In dem Fall werden darauf wahrscheinlich Drag-, MouseDown-, EventHandler usw. erstellt welche dann das Scrollen ermöglichen. Findet es die Controls im Template nicht, so gibt es auch nichts zu scrollen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.