web-dev-qa-db-fra.com

UWP xaml: Comment afficher un bouton avec une icône et du texte?

Comment afficher une image/icône ET du texte dans un bouton?

<StackPanel Name="stackPanel" Orientation="Horizontal" Tapped="stackPanel_Tapped">
    <Button x:Name="button" FontFamily="Segoe MDL2 Assets" Content="&#xE779;" Width="50" Height="50" Background="Transparent" />
    <TextBlock Text="Grades" FontSize="18" VerticalAlignment="Center" />
</StackPanel>

Je peux ajouter un taplistener au stackpanel, mais cela ne donnera pas au stackpanel un effet visuel comme un vrai bouton.

J'ai aussi essayé:

<Button FontFamily="Segoe MDL2 Assets" Width="50" Height="50" x:Name="button" Content="test">
   <Image x:Name="button" Source="Assets/test.png" />
</Button>

Mais je ne peux pas définir le contenu deux fois. Je veux du texte et une icône dans un bouton, donc lorsqu'un utilisateur clique dessus, cela aura un effet visuel comme un bouton. Est-ce possible? Ou quelqu'un d'autre a-t-il une autre méthode pour y parvenir?

Merci d'avoir lu.

13
Denny

Donc, comme je n'ai pas pu trouver de doublon direct (que je pourrais jurer que c'est le type de question qui a été posée auparavant), je suppose que je fournirai une réponse légitime.

Au cœur du modèle du bouton se trouve un ContentPresenter qui vous permet de passer dans n'importe quel objet CLR. La mise en garde est cependant qu'un seul peut être adopté. CEPENDANT, si cet objet est un panneau capable de contenir des enfants, il passera tout par le contenu.

Donc, dans ce cas, si nous l'avons fait de cette façon:

<Button>
    <Image/>
    <TextBlock/>
</Button>

Ensuite, il échouera et se plaindra d'un seul objet autorisé à la fois.

Sauf lorsque vous fournissez un panneau parent pour contenir ces enfants, il respecte tout cela en tant que contenu et fournira le résultat souhaité à titre d'exemple:

<Button>
    <StackPanel>
        <Image/>
        <TextBlock/>
    </StackPanel>
</Button>

Donc, puisque StackPanel est un objet CLR qui peut héberger des enfants, vous êtes prêt à partir. J'espère que cela vous aide, bravo!

16
Chris W.