¿Cómo almacenar y recuperar múltiples formas en XAML/WPF?
vb.net resources (2)
Parece que tengo muchos problemas para hacer lo que deberían ser simples cosas con XAML / WPF. He creado algunas imágenes basadas en XAML usando formas como Rectángulo y Elipse para crear íconos que necesito otras partes de mi aplicación para usar, pero no puedo parecen descubrir cómo hacer esto: parece que puedo almacenar un lienzo en el diccionario de recursos pero no hay forma de usarlo en ninguna otra ventana. ¿Cómo se hace esto? ¡Estas son imágenes simples, solo dos o tres formas que quiero usar a lo largo de mi proyecto!
Las imágenes también se pueden cambiar de tamaño: sé cómo almacenar las rutas, sin embargo, estas formas contienen estilos de degradado que quiero conservar, además no sé cómo el rectángulo podría convertirse en datos de ruta y color.
¡Gracias!
No desea utilizar un lienzo para almacenar estos recursos en un diccionario de recursos. La raíz de su geometría es probablemente algo así como un DrawingBrush (especialmente si usó Expression Design para crear las imágenes), y esos son los elementos que deberían agregarse a un diccionario de recursos de la siguiente manera:
<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>
Asumiré que sabes cómo hacer referencia a este diccionario de recursos en tu aplicación.
Para usar los recursos, simplemente los asignaría a las propiedades apropiadas. Para las imágenes de tipo de forma, puede asignarlas a algo como la propiedad Fill de un Rectángulo (hay muchas otras maneras, pero esta es simple). Aquí hay un ejemplo:
<Button>
<Grid>
<Rectangle Fill="{StaticResource YourResourceKey}" />
</Grid>
</Button>
Debería usar un Dibujo y mostrarlo usando un DrawingBrush como sugirió KP Adrian o un DrawingImage y un control de Imagen, pero si no puede usar un dibujo, puede usar un Lienzo dentro de 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>