Pregunta

Actualmente tengo un lienzo que contiene un montón de Sqaures como sus hijos. Estos Sqaures sientan en diferentes líneas. Me gustaría llamar un fondo de la tela que dibuja líneas (como un bloc de notas tendría líneas azules finta en el papel) Me gustaría llegar a esta dinámica mediante la unión a una colección de "líneas" Así que si hay 2 líneas de la colección, 2 líneas se dibujan en el fondo del lienzo. Yo estaba buscando en el uso de DrawingBrush, pero no estoy seguro de si este es el camino correcto hacia adelante

<DrawingBrush>
  <DrawingBrush.Drawing>
    <Line Name=Line1/>
    <Line Name=Line2/>
  </DrawingBrush.Drawing>
</DrawingBrush>

(BTW El código anterior no funciona, es sólo para explicar el conecpt)

¿Fue útil?

Solución

Trate de este enfoque. Utilice una nueva clase para su lienzo:

internal class SpecialCanvas : Canvas
{
    ...

    ObservableCollection<Line> Lines {get; set;}

    DrawingVisual backgroundVisual = new DrawingVisual;

    public SpecialCanvas()
    {
        this.Background = new VisualBrush(backgroundVisual);   
    }

    private void OnLinesChanged(...)
    {
       using (DrawingContext dc = this.backgroundVisual.RenderOpen())
       {
           // Draw your lines to dc here.
       }
    }

}

Otros consejos

Hay un montón de maneras que usted podría hacer lo que quiere hacer. Por sólo un XAML solución simple, sólo podría utilizar un ItemsControl.

<Window.Resources>
    <x:Array x:Key="Lines" Type="{x:Type Line}"> 
        <Line X1="0" X2="400" Y1="25" Y2="25" Stroke="Black" />
        <Line X1="0" X2="400" Y1="25" Y2="25" Stroke="Black" />
    </x:Array>

</Window.Resources>
<Canvas>
    <ItemsControl ItemsSource="{StaticResource Lines}" />

    <Rectangle Height="20" Width="20" Canvas.Left="20" Canvas.Top="5" Stroke="Blue" Fill="Blue" />
    <Rectangle Height="20" Width="20" Canvas.Left="120" Canvas.Top="5" Stroke="Blue" Fill="Blue" />
    <Rectangle Height="20" Width="20" Canvas.Left="20" Canvas.Top="30" Stroke="Blue" Fill="Blue" />
    <Rectangle Height="20" Width="20" Canvas.Left="120" Canvas.Top="30" Stroke="Blue" Fill="Blue" />
</Canvas>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top