È possibile modificare la quantità di scorrimento di WPF ScrollViewer? Mi sto semplicemente chiedendo se è possibile cambiare lo scrollviewer in modo che quando si utilizza la rotellina del mouse o le frecce dello scrollviewer, la quantità di scorrimento incrementale possa essere modificata.Wpf ScrollViewer Quantità di scorrimento
risposta
La risposta breve è: non c'è modo di farlo senza scrivere un codice di scorrimento personalizzato, ma non lasciare che ti spaventi non è poi così difficile.
ScrollViewer funziona scorrendo utilizzando unità fisiche (ovvero pixel) o impegnandosi con un'implementazione IScrollInfo per utilizzare unità logiche. Questo è controllato dall'impostazione the CanContentScroll property dove un valore di falso significa "scorre il contenuto utilizzando unità fisiche" e un valore di vero significa "scorre il contenuto logicamente".
Quindi, come fa ScrollViewer a scorrere il contenuto logicamente? Comunicando con un'implementazione IScrollInfo. Ecco come si può rilevare esattamente quanto il contenuto del pannello scorre quando qualcuno esegue un'azione logica. Take a look at the documentation for IScrollInfo per ottenere un elenco di tutte le unità logiche di misurazione che possono essere richieste per lo scorrimento, ma poiché hai menzionato la rotella del mouse ti interesserà principalmente i metodi MouseWheelUp/Giù/Sinistra/Destra.
È possibile implementare un comportamento sullo scrollviewer. Nel mio caso CanContentScroll
non ha funzionato. La soluzione seguente funziona per lo scorrimento con la rotellina del mouse e per il draging della barra di scorrimento.
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);
}
}
Si potrebbe usare in questo modo:
<ScrollViewer MaxHeight="248"
VerticalScrollBarVisibility="Auto">
<i:Interaction.Behaviors>
<behaviors:StepSizeBehavior StepSize="62" />
</i:Interaction.Behaviors>
Ho fatto questo per garantire numeri interi sulla scrollbar1.ValueChanged:
scrollbar1.Value = Math.Round(scrollbar1.Value, 0, MidpointRounding.AwayFromZero)
- 1. ScrollViewer scorrimento invece di controllo figlio ScrollViewer
- 2. Attivazione sulla visibilità della barra di scorrimento di ScrollViewer (WPF)
- 3. C# WPF - ScrollViewer + Problemi di TextBlock
- 4. WPF - ScrollViewer con intestazione/riga fissa
- 5. Abilita scorrimento per WPF Treeview
- 6. ScrollViewer WPF: la scollatura orizzontale non funziona
- 7. WPF: Come estrarre la barra di scorrimento da ScrollViewer a livello di programmazione?
- 8. Come abilitare barra di scorrimento/scorrimento su un WPF DataGrid
- 9. Come aumentare la larghezza della barra di scorrimento in WPF ScrollViewer?
- 10. Pannello di avvolgimento WPF e scorrimento
- 11. WPF - centrare il contenuto in un scrollviewer?
- 12. ScrollViewer non sta scorrendo in WPF
- 13. La barra di scorrimento orizzontale WPF non è visibile
- 14. Non è possibile disegnare completamente un ListBox/Scrollviewer in WPF
- 15. C'è un modo per abilitare al tocco lo scorrimento in un ScrollViewer WPF?
- 16. Modo corretto per impostare ScrollViewer (per lo scorrimento verticale) su un frame WPF?
- 17. Rallentamento delle prestazioni con WPF DataGrid e ScrollViewer
- 18. Tablet WPF Applicazione desktop Windows - Scorrimento numero
- 19. Silverlight Vertical only ScrollViewer?
- 20. Scorrimento uniforme all'interno del pannello stack nel wpf
- 21. Listview all'interno di scrollviewer impedisce scrollviewer scroll
- 22. Come ottenere il valore di Zoom nel visualizzatore di scorrimento in C# wpf Kinect SDK 2.0?
- 23. ScrollViewer GridView XAML
- 24. jQuery scorrimento per ancorare (determinata quantità meno di pixel)
- 25. come posso abilitare le barre di scorrimento sul Datagrid WPF?
- 26. Barra di scorrimento WPF per una finestra ridimensionabile
- 27. scorrimento liscio per WPF DataGrid
- 28. Fai ScrollViewer non cattura il controllo a sinistra ea destra di controllo in WPF
- 29. scorrimento visualizzatore di ridimensionamento (in basso a destra) in WPF
- 30. Abilitazione barra di scorrimento in WPF