Ist es möglich, die Menge zu ändern, die der WPF ScrollViewer scrollt? Ich frage mich nur, ob es möglich ist, den Scrollviewer zu ändern, so dass bei Verwendung des Mausrads oder der Scrollviewer-Pfeile der Umfang des inkrementellen Scrollens geändert werden kann.Wpf ScrollViewer Scroll-Betrag
Antwort
Die kurze Antwort ist: Es gibt keine Möglichkeit, dies zu tun, ohne einige benutzerdefinierte Scroll-Code zu schreiben, aber lassen Sie sich das nicht erschrecken, es ist nicht so schwer.
Der ScrollViewer funktioniert entweder durch Scrollen mit physikalischen Einheiten (z. B. Pixel) oder durch Verwenden einer IScrollInfo-Implementierung, um logische Einheiten zu verwenden. Dies wird durch die Einstellung the CanContentScroll property gesteuert, wobei ein Wert von false bedeutet "scrolle den Inhalt mit physischen Einheiten" und ein Wert von true bedeutet "scrolle den Inhalt logisch".
Wie scrollt der ScrollViewer den Inhalt logisch? Durch die Kommunikation mit einer IScrollInfo-Implementierung. Auf diese Weise können Sie genau bestimmen, um wie viel der Inhalt Ihres Panels gescrollt wird, wenn jemand eine logische Aktion ausführt. Take a look at the documentation for IScrollInfo, um eine Liste aller logischen Maßeinheiten zu erhalten, die zum Scrollen angefordert werden können, aber da Sie das Mausrad erwähnt haben, werden Sie hauptsächlich an den MouseWheelUp/Down/Left/Right-Methoden interessiert sein.
Sie könnten ein Verhalten auf dem Scrollviewer implementieren. In meinem Fall CanContentScroll
hat nicht funktioniert. Die folgende Lösung dient zum Scrollen mit dem Mausrad sowie zum Bewegen der Bildlaufleiste.
public class StepSizeBehavior : Behavior<ScrollViewer>
{
public int StepSize { get; set; }
#region Attach & Detach
protected override void OnAttached()
{
CheckHeightModulesStepSize();
AssociatedObject.ScrollChanged += AssociatedObject_ScrollChanged;
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.ScrollChanged -= AssociatedObject_ScrollChanged;
base.OnDetaching();
}
#endregion
[Conditional("DEBUG")]
private void CheckHeightModulesStepSize()
{
var height = AssociatedObject.Height;
var remainder = height%StepSize;
if (remainder > 0)
{
throw new ArgumentException($"{nameof(StepSize)} should be set to a value by which the height van be divised without a remainder.");
}
}
private void AssociatedObject_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
const double stepSize = 62;
var scrollViewer = (ScrollViewer)sender;
var steps = Math.Round(scrollViewer.VerticalOffset/stepSize, 0);
var scrollPosition = steps * stepSize;
if (scrollPosition >= scrollViewer.ScrollableHeight)
{
scrollViewer.ScrollToBottom();
return;
}
scrollViewer.ScrollToVerticalOffset(scrollPosition);
}
}
Sie würde es so verwenden:
<ScrollViewer MaxHeight="248"
VerticalScrollBarVisibility="Auto">
<i:Interaction.Behaviors>
<behaviors:StepSizeBehavior StepSize="62" />
</i:Interaction.Behaviors>
Ich habe diese ganze Zahlen auf scrollbar1.ValueChanged sicherzustellen:
scrollbar1.Value = Math.Round(scrollbar1.Value, 0, MidpointRounding.AwayFromZero)
- 1. WPF - benutzerdefinierte Steuerung ScrollViewer
- 2. C# WPF - ScrollViewer + TextBlock Probleme
- 3. WPF ScrollViewer von TreeView entfernen
- 4. WPF: ListView innerhalb von Scrollviewer; Layout Frage
- 5. WPF ScrollViewer: Horizontales Scrollen funktioniert nicht
- 6. WPF Canvas in ScrollViewer-Größe passend für
- 7. Erstellen eines benutzerdefinierten ScrollViewer mit WPF UserControl
- 8. WPF - ScrollViewer mit festen Header/Zeile
- 9. C#/WPF - ScrollViewer Scroll-Position abrufen?
- 10. WPF-Referenz ScrollContentPresenter von ScrollViewer Vorlage
- 11. Warum ScrollViewer die Rasterzeilenhöhe in WPF überschreibt?
- 12. xaml ScrollViewer in ScrollViewer
- 13. ScrollViewer-Bildlauf verhindern
- 14. Horizontale Bildlaufleiste für WPF ScrollViewer wurde nie angezeigt
- 15. Einstellung der Scroll-Ausdehnung von ScrollViewer in WPF
- 16. Wie kann ich meinen WPF Scrollviewer zum Zoomen verwenden?
- 17. WPF/C# Textumbruch in einem Scrollviewer macht Fenstergrößenänderung verzögert
- 18. WPF: Erhalten von AccessText in ScrollViewer zum Umbruch
- 19. WPF ScrollViewer um DataGrid wirkt sich auf die Spaltenbreite aus
- 20. Touch Scrolling ScrollViewer in WPF-App mit RealTimeStylus deaktiviert
- 21. Gibt es eine Möglichkeit zum Scrollen in einem WPF ScrollViewer?
- 22. Wie kann die Bildlaufleiste in WPF ScrollViewer vergrößert werden?
- 23. ScrollViewer wird nicht richtig angezeigt?
- 24. ScrollViewer ContentScroll fehlt
- 25. Animieren (reibungslos) ScrollViewer programmgesteuert
- 26. ScrollViewer nicht scrollen
- 27. ScrollViewer ignoriert ContentTemplateSelector
- 28. ScrollViewer scrollt zurück auf WP7
- 29. Scrollviewer & SIP-Ausgabe (WP7.5 Mango)
- 30. UWP: ScrollViewer in einem ItemsPanel