1

我目前有一个画布,其中包含一堆正方形作为它的孩子。这些广场坐落在不同的线上。我想为画线的画布绘制一个背景(就像记事本会在纸上假装蓝线)我想通过将它绑定到“线条”的集合来动态绘制它所以如果有 2 行集合,将在画布的背景上绘制 2 条线。我正在考虑使用 DrawingBrush,但我不确定这是否是正确的前进方式

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

(顺便说一句,上面的代码不起作用,只是为了解释一下conecpt)

4

2 回答 2

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

}

于 2009-11-03T18:41:23.857 回答
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>
于 2009-11-03T20:26:03.513 回答