动态创建画布背景

时间:2009-11-03 16:33:00

标签: wpf canvas background drawingbrush

我目前有一个画布,其中包含一堆sqaures作为其子画面。 这些广场坐落在不同的线路上。 我想为绘制线条的画布绘制背景(就像记事本会在纸上留下虚线) 我想通过将它绑定到“行”的集合来动态绘制它 因此,如果集合中有2行,则会在画布的背景上绘制2行。 我正在研究使用DrawingBrush,但我不确定这是否是正确的前进方式

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

(BTW以上代码不起作用,只是解释了conecpt)

2 个答案:

答案 0 :(得分:1)

尝试这种方法。为画布使用新类:

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.
       }
    }

}

答案 1 :(得分:0)

有很多方法可以做你想做的事。对于一个简单的仅限XAML的解决方案,您可以使用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>