12
votes

Ne peut pas entièrement styler une liste de liste / ScrollViewer dans WPF

J'utilise des barres de défilement personnalisées Nous avons créées à l'aide de Standard ControlTemplates, toutefois, lorsque je les applique dans une liste, il y a un coin en bas à droite que je ne peux trouver aucun moyen de remplacer.

Malheureusement, je ne peux pas poster une image avant d'avoir plus de points. Mais le coin que je parle est lorsque la barre de défilement verticale et horizontale apparaît, il y a un espace en bas à droite qui est rempli d'une couleur blanc cassé que je suis incapable d'ovrerRride


1 commentaires

Pouvez-vous ajouter votre code pour le modèle ... cela pourrait vous aider à répondre à la question.


3 Réponses :


0
votes

Deux choses qui pourraient aider:

1) Utilisez Snoop pour explorer l'élément d'élément de votre application, cela pourrait aider à trouver le problème .

2) En fonction de la façon dont vous avez démarré votre contrôle, vous pouvez envisager de partir à partir d'une copie de la liste standard. J'ai trouvé des problèmes avec certains contrôles lorsque je commence à coiffer d'un modèle vide ou partiel.

espère que cela aide


1 commentaires

J'ai effectivement commencé à partir d'une copie de la liste standard (modèle extrait à l'aide de Mélange).



11
votes

Ceci est la partie du code de modèle que j'ai obtenu pour ScrollViewer à l'aide de mélange. J'ai ajouté un rectangle dans le coin inférieur droit et j'ai réglé le remplissage en rouge. Vous pouvez le styler de la même manière ou vous pouvez développer l'une des barres de défilement pour couvrir l'espace à l'aide de grid.rowspan = "2" pour verticalscrollbar (premier) ou de grille.columnspan = "2" pour horizontalscrollbar (deuxième). < Pré> xxx


1 commentaires

Cela a fonctionné. Mais je suis en train de geler que la performance d'exécution diminue de manière dramatique linéairement. Pour montrer 7000 articles (élément relativement simple et léger) utilisé pour avoir besoin de 1-2 secondes, mais avec cette approche pourrait comporter jusqu'à 15-19 secondes. Je me demande où ralentissez la performance de rendu.



1
votes

Une autre solution de deux solutions.

1) La couleur rectangle est dynamique, avec la clé "SystemColors.Controlbrushkey". Vous pouvez remplacer cette clé dans un style personnalisé ou les ressources du contrôle ScrollViewer (ou l'un de ses ancêtres). Source: Cette question sur MSDN . p>

Exemple: P>

<Style x:Key="MyCustomScrollViewer" TargetType="{x:Type ScrollViewer}">
    <Style.Resources>
        <!-- 'BasedOn' can be omitted -->
        <Style TargetType="Rectangle" BasedOn="{StaticResource {x:Type Rectangle}}">
            <Setter Property="Visibility" Value="Hidden"/>
        </Style>
    </Style.Resources>
</Style>


1 commentaires

Merci ! J'ai bien compris que certains contrôles ont leur propre moyen de remplacer ce petit rectangle, et d'une façon de résoudre le problème consistait à redéfinir les commandes de contrôle de l'un de ceux que je voulais utiliser (TreeViewControl), mais votre approche primordiale de ressources est beaucoup plus simple. Merci !