1

私は現在、子としてたくさんのsqauresを含むキャンバスを持っています。これらの正方形は異なる線上にあります。線を描くキャンバスの背景を描きたい(メモ帳が紙に薄い青い線を描くように)これを「線」のコレクションにバインドして動的に描きたいので、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 に答える