J'ai un Scrollviewer dans un TabControl, et pour une raison quelconque lorsque vous changez d'onglet, mon ScrollViewer passe à HorizontalOffset de 12. Mon ScrollViewer, entre autres choses, a un ListView dedans avec une hauteur illimitée. C'est une mise en page étrange, mais tout ce qui se trouvait à l'intérieur du défilement devait être imprimable, donc je ne pouvais pas facilement laisser le ListView faire défiler tout seul.WPF - ScrollViewer ne défile pas lorsque ScrollToHorizontalOffset() est appelé
J'ai donc essayé les lignes suivantes en cas SelectionChanged du TabControl:
Console.WriteLine(Scroller.HorizontalOffset);
Scroller.ScrollToHorizontalOffset(0);
Console.WriteLine(Scroller.HorizontalOffset);
Et ils impriment 12 pour les appels à WriteLine() ... Il ne bouge pas, mais vous pouvez faire défiler de l'interface utilisateur réelle.
Est-ce que quelqu'un sait ce qui causerait ce comportement étrange?
Je vais essayer de trouver le code approprié pour poster, mais c'est un grand projet et il pourrait être difficile à recréer dans une solution d'échantillon.
Autres infos:
- Le problème ne se produit que si le contenu est assez grand où il peut horizontalement défiler.
- Ma visibilité horizontale et verticale de la barre de défilement est Auto, mais le problème persiste si elles sont définies sur Caché ou Visible.
MISE À JOUR:
Si vous cliquez sur mon ListView qui est à l'intérieur du ScrollViewer et sélectionnez un élément, les rouleaux ScrollViewer à ce même 12 décalage pixel. Mon problème peut-il être lié à l'activation de mon ListView? Est-ce qu'un ListView appelle BringIntoView() sur lui-même quand il reçoit le focus?
Cette Xaml reproduit la question:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window11" Height="300" Width="300">
<TabControl>
<TabItem Header="Tab One">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ListBox Margin="25,0,0,0" Width="2000">
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
</ListBox>
</ScrollViewer>
</TabItem>
<TabItem Header="Tab Two">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ListBox Margin="25,0,0,0" Width="2000">
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
<ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>
</ListBox>
</ScrollViewer>
</TabItem>
</TabControl>
</Window>
Slap cela dans XamlPad, exécutez. Cliquez sur un en-tête Tab et notez le scroll ScrollViewer par lui-même, jouez avec et remarquez comment ma marge sur le ListBox est défilée hors de l'écran. Comment puis-je empêcher ou contourner ce problème? Cela rend ma mise en page plutôt joviale dans mon cas.
https://go4answers.webhost4life.com/Example/scrollviewer-scrolltohorizontaloffset-51429.aspx –