openclassroom - tuto wpf



Comment stocker et récupérer plusieurs formes dans XAML/WPF? (2)

Semble avoir beaucoup de problèmes à faire ce qui devrait être des choses simples avec XAML / WPF - J'ai créé des images basées sur XAML en utilisant des formes comme Rectangle et Ellipse pour créer des icônes dont j'ai besoin d'autres parties de mon application - mais je ne peux pas semble trouver comment faire cela - il me semble être capable de stocker un Canevas dans le dictionnaire des ressources mais aucun moyen de l'utiliser dans une autre fenêtre. Comment cela se fait - ce sont des images simples que deux ou trois formes que je veux utiliser tout au long de mon projet!
Les images doivent également être redimensionnables - je sais comment stocker les chemins, mais ces formes contiennent des styles de dégradé que je veux conserver et je ne sais pas comment le rectangle pourrait être converti en données de chemin et de couleur.

Merci!

https://src-bin.com


Answer #1

Vous ne voulez pas utiliser Canvas pour stocker ces ressources dans un dictionnaire de ressources. La racine de votre géométrie est probablement quelque chose comme un DrawingBrush (surtout si vous avez utilisé Expression Design pour créer les images), et ce sont les éléments qui devraient être ajoutés à un dictionnaire de ressources comme ceci:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <DrawingBrush x:Key="YourResourceKey">
<DrawingBrush.Drawing>
<DrawingGroup>
<!-- This can change a lot, but a typical XAML file exported from a Design image would have the geometry of the image here as a bunch of Paths or GeometryDrawings -->
</DrawingGroup>
</DrawingBrush.Drawing>
</ResourceDictionary>

Je suppose que vous savez comment référencer ce dictionnaire de ressources dans votre application.

Pour utiliser les ressources, vous devez simplement les affecter aux propriétés appropriées. Pour les images de type forme, vous pouvez les affecter à quelque chose comme la propriété Fill d'un Rectangle (il y en a beaucoup d'autres, mais c'est une simple). Voici un exemple:

<Button>
   <Grid>
      <Rectangle Fill="{StaticResource YourResourceKey}" />
   </Grid>
</Button>

Answer #2

Vous devez utiliser un dessin et l'afficher en utilisant un DrawingBrush comme KP Adrian suggéré ou un DrawingImage et un contrôle Image, mais si vous ne pouvez pas utiliser un dessin, vous pouvez utiliser un Canvas dans un VisualBrush.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
    <VisualBrush x:Key="Icon">
        <VisualBrush.Visual>
            <Canvas Width="10" Height="10">
                <Ellipse Width="5" Height="5" Fill="Red"/>
                <Ellipse Width="5" Height="5" Fill="Blue" Canvas.Left="5" Canvas.Top="5"/>
            </Canvas>
        </VisualBrush.Visual>
    </VisualBrush>
</Page.Resources>
    <Rectangle Width="100" Height="100" Fill="{StaticResource Icon}"/>
</Page>




shape