Obtenir une référence à mon WPF ListBox du ScrollViewer en C#?
Je pense que cela devrait être facile, mais je vais avoir un moment difficile avec elle.
Comment puis-je obtenir une référence à ma ListBox du scrollviewer en C#? J'ai essayé à peu près tout ce que je pense de. La zone de liste est en WPF Contrôle Personnalisé nous avons donc utiliser un Modèle.FindName pour obtenir des références pour toutes nos commandes. Ma zone de liste ressemble à ceci:
<ListBox x:Name="PART_SoundList"
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Hidden" Focusable="False" FocusVisualStyle="{x:Null}"
HorizontalAlignment="Center" VerticalAlignment="Bottom" BorderThickness="0"
ItemContainerStyleSelector="{StaticResource ListBoxItemAlternatingStyleSelector}"
ItemsSource="{Binding}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" Height="850" Focusable="False" Panel.ZIndex="999" >
<WrapPanel.RenderTransform>
<TransformGroup>
<ScaleTransform CenterX="0" CenterY="0" ScaleX=".75" ScaleY=".57" />
</TransformGroup>
</WrapPanel.RenderTransform>
</WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Template>
<ControlTemplate>
<ScrollViewer x:Name="Scroller" VerticalAlignment="Bottom" Focusable="False" Style="{StaticResource HorizontalScroller}" >
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Focusable="False" Panel.ZIndex="999" />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>
</ListBox>
Modèle.FindName("Scroller",this) comme ScrollViewer résultats dans la valeur null.
Des idées?
De quoi avez-vous besoin d'une référence pour le ScrollViewer? Seulement curieux, car il peut y avoir une autre approche que l'on pourrait prendre pour résoudre votre problème.
OriginalL'auteur Brent Lamborn | 2010-10-18
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement essayer d'obtenir une référence à la ScrollViewer trop tôt. Essayez de déplacer votre code dans l'événement chargé et vérifier si elle renvoie toujours null:
dans votre customControl/constructeur:
Je ne peux pas trouver
.Findname
après Modèle! Toute idée de ce que j'ai un manque?OriginalL'auteur Claudiu Mihaila
Utiliser appel récursif de Visual Arbre de saisir n'importe quelle Visuelle de l'arbre.
Cela vous donne une méthode générique pour obtenir de l'élément Visuel du type mentionné à partir de l'arborescence Visuelle.
Cette solution est à partir de MSDN de la documentation de FrameworkTemplate.FindName Méthode.
Élément enfant doit être captilized au générique de la spécificateur de type. c'est à dire, <ChildItem> non <childItem>
OriginalL'auteur abhishek
Je suis en supposant que le XAML, vous avez ci-dessus fait partie de la ControlTemplate pour votre CustomControl, droit? Je voudrais également supposer que vous êtes obtenir le contrôle de pièces sur le OnApplyTemplate() la méthode, non? Si c'est le cas, alors, je pense que ce que vous devez faire est de forcer un appel à PART_SoundList.ApplyTemplate() avant de trouver le ScrollViewer. Donc, le code de votre Contrôle Personnalisé devrait ressembler à quelque chose comme ceci:
OriginalL'auteur ASanch
Si vous allez utiliser la référence à défilement/vérifier la taille de la fenêtre de la IScrollProvider devrait être suffisant pour vous.
Vous pouvez y accéder comme ça dans votre code derrière (Note Claudiu point d'attente jusqu'à ce que le chargé d'événement):
Puis faites défiler l'écran horizontalement et verticalement, chaque fois que vous le souhaitez et à votre contenu de coeurs.
OriginalL'auteur Ragepotato
Pour ceux qui sont arrivés ici en cherchant une réponse à la question d'origine:
En C#
ou en VB
Où dans le code XAML
OriginalL'auteur TripleAntigen
Les utiliser pour accéder à défilement spectateur dans WPF.
var scrollViewer = ((Frontière)PlaybackDeviceList.De modèle.FindName("Bd", PlaybackDeviceList)).Enfant;
OriginalL'auteur Aqib Banday