キャンバスに要素を描画するアプリケーションをプログラミングしました。これらの要素は長方形です(しかし、私はそれにテキストを入れたいので、私はBorderクラスを使いました)。これらの要素はオブジェクトを表します(私の場合はTask)。WPF:キャンバスへのリソース要素の追加とプロパティのバインド
私はこのような背後にあるコードでこれらの要素を描画:
foreach (var task in TasksList)
{
var rect = new Border();
rect.Background = (SolidColorBrush)(new
BrushConverter().ConvertFrom("#0074D9"));
rect.BorderBrush = (SolidColorBrush)(new
BrushConverter().ConvertFrom("#001f3f"));
rect.BorderThickness = new Thickness(2);
rect.Width = 60;
rect.Height = 60;
var t = new TextBlock
{
Text = task.Id.ToString(),
Foreground = new SolidColorBrush(Colors.White),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
rect.Child = t;
Canvas.SetLeft(rect, coordX);
Canvas.SetTop(rect, coordY);
Canvas.Children.Add(rect);
}
Instedの背後にあるコードでは境界線(RECT)を設計します。私はそれをXAMLリソースとして設計し、このリソースのインスタンスをコードの背後に作成したいと考えています。どのようにこれを達成することができますか? この場合バインディングはどのように使用できますか?たとえば、xamlリソースでは、タスクのプロパティIDをボーダーの中央に配置されたTextBlockのTextプロパティにバインドする必要があることを定義する必要があります。しかし後で、コードの背後に、どのようにxamlで定義されたプロパティのDataContextを指定するのですか?
あなたは私を導くことができます。ありがとう
コードの背後にUI要素を作成しないでください。代わりに、ItemsPanelとしてCanvasを持つItemsControlと適切なItemTemplateを使用します。 MSDNの[データテンプレートの概要](https://msdn.microsoft.com/en-us/library/ms742521.aspx)の記事を読んでください。例については、[この質問](http://stackoverflow.com/q/22324359/1136211)も参照してください。 – Clemens