9
votes

Personnalisation de l'état bascule d'un bouton bascule dans WPF

Je veux personnaliser l'état basculant du bouton bascule dans WPF. Je veux définir une image sur le bouton bascule lorsqu'il est activé et définir une autre image quand elle est éteinte. Pour ce faire, j'ai pensé utiliser des déclencheurs. C'est comme ça que j'ai fini par faire, xxx

L'extrait ci-dessus semble fonctionner correctement pour deux éléments de la liste de liste. Si plus d'un élément a la valeur de liaison, le statut est vrai, cela ne fonctionne pas (cela ne fonctionne que pour un tel objet). S'il vous plaît dites-moi si je continue dans la bonne direction. Dites-moi également d'autres moyens d'y parvenir.


0 commentaires

4 Réponses :


10
votes

Le problème ici est que vous utilisez image ressources. L'image dans vos ressources est une instance concrète d'un contrôle. Il ne peut être que dans un endroit à la fois. Ainsi, lorsque vous avez plus d'un élément de votre liste ...

Ceci devrait fonctionner pour vous: xxx

Notez que vous pouvez améliorer la performance de ceci en utilisant un Imagesource Pour chaque fichier image dans vos ressources, puis référencez ceci dans l'image . Cela signifie efficacement que chaque image n'est chargée qu'une fois du disque, plutôt que 2 * N fois (où N est le nombre d'éléments de votre liste.)


1 commentaires

L'extrait ci-dessus lance une exception. Voici les détails, impossible d'ajouter du contenu de type 'System.Windows.Controls.Image' à un objet de type 'system.Object'. Erreur à l'objet 'system.windows.controls.image' dans le fichier de balisage



6
votes

Cette réponse sera T'aider. Dans votre ensemble, j'ai pris une toggleboutton et je l'ai cité pour regarder comme togglebutton dans une TreeView (la + / - partie à développer des nœuds d'effondrement). Vous aurez juste besoin de changer les chemins qui dessinent les signes - et +, pour montrer à vos images à la place.

Voici personnalisé à vous, il suffit de mettre une image appelée "on.jpg" et une autre appelée "off.jpg "Dans votre répertoire C: \, et il devrait fonctionner en copiant / coller dans votre fenêtre: xxx


4 commentaires

Qu'est-ce que Expressimage dans l'extrait ci-dessus? Il n'y a pas de types de déclenchement appelés expansimage. Pourriez-vous s'il vous plaît vérifier?


Le nom de l'image dans votre modèle: . Ceci est tellement que le ControlTemplate peut y accéder et modifier ses propriétés:


Désolé, je ne l'ai pas lu complètement. Merci. Ça marche maintenant. Pourquoi ne fonctionnait-il pas pour moi? Pourquoi ne venait-il que une fois ??


Je ne suis pas vraiment sûr en ce moment, quand je reçois 10 minutes, je vais regarder votre code et vous faire savoir ce qui n'allait pas.



1
votes

Like Drew Noakes a dit, dans mon snappte, il n'y avait que deux images. Donc, seuls deux articles fonctionnaient correctement. J'ai résolu ce problème avec l'extrait suivant. xxx

simple, j'ai déplacé les déclencheurs dans le modèle de données. Ne sais pas si c'est la bonne réponse. Semble fonctionner


2 commentaires

Intéressant, je reçois l'erreur 'System.Windows.Controls.Image' n'est pas une valeur valide pour 'Setter.Value'; Les valeurs dérivées du visuel ou du contenu ne sont pas prises en charge.


Merci d'avoir posté cette réponse.



3
votes

Voici un ToggleButton avec 3 images et une pop up:

  1. une image pour quand ischecked = false. li>
  2. une image pour quand ischecked = true. li>
  3. une image pour quand ismouseover = true. li> ol>

    Les images sont stockées dans des ressources sous forme de bitmapimage afin d'éviter de changer de visuaux sur les trigeurs. P>

    Les fichiers image doivent être ajoutés à des ressources, puis les fichiers ajoutés à la "RESOCES "Le dossier du projet doit être marqué comme Buildaction = ressource forte>. p>

    Il applique également une opacité à la commande d'image lorsque le toggleboutton isenabled = false; P>

    Code: P>

        <ToggleButton
            x:Name="btnToggleImage"
            Margin="5"
            Width="50"            
            Height="50"
            >
            <ToggleButton.Resources>
                <BitmapImage x:Key="imgNormal" UriSource="/YOURPROJECTNAME;component/Resources/YourUncheckedImage.png"/>
                <BitmapImage x:Key="imgHover" UriSource="/YOURPROJECTNAME;component/Resources/YourHoverImage.png"/>
                <BitmapImage x:Key="imgChecked" UriSource="/YOURPROJECTNAME;component/Resources/YourCheckedImage.png"/>
            </ToggleButton.Resources>
    
            <ToggleButton.Style>
                <Style TargetType="ToggleButton">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ToggleButton">
                                <Image
                                    x:Name="PART_Image"
                                    Source="{StaticResource imgNormal}"
                                    />
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsChecked" Value="true">
                                        <Setter TargetName="PART_Image" Property="Source" Value="{StaticResource imgChecked}"/>
                                    </Trigger>
                                    <Trigger Property="IsMouseOver" Value="true">
                                        <Setter TargetName="PART_Image" Property="Source" Value="{StaticResource imgHover}"/>
                                    </Trigger>
                                     <Trigger Property="IsEnabled" Value="false">
                                        <Setter TargetName="PART_Image" Property="Opacity" Value="0.6"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate> 
                        </Setter.Value>
                    </Setter>
                </Style>
            </ToggleButton.Style>
        </ToggleButton>        
    
        <Popup
            x:Name="popup1"
            PlacementTarget="{Binding ElementName=btnToggleImage}"
            PopupAnimation="Slide"
            IsOpen="{Binding ElementName=btnToggleImage, Path=IsChecked, Mode=TwoWay}"
            StaysOpen="False"
            MinWidth="{Binding ElementName=btnToggleImage, Path=Width}">
            <Grid Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
                <!--<ItemsPresenter/>-->
                <Label Content="Hello Wolrd!"/>
            </Grid>
        </Popup>
    


0 commentaires