いくつかのジオメトリをレンダリングするために WPF シェイプを使用しています。レンダリングされたシェイプのジオメトリを保存し、後で追加します。今問題は、形状の高さと幅を増やすなど、ジオメトリ オブジェクトを変更できるようにしたいということです。
文字列を更新し、それをジオメトリ オブジェクトに割り当てて更新する方法を知っています。
同じことを達成するための代替またはより良い方法はありますか?
Xaml シリアル化を使用できます。
MSDNから:
// Create the Xaml.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";
// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);
// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
Xaml のシリアル化にはいくつかの制限がありますが、私が見る限り、ジオメトリの保存と読み込みは問題ありません。
Ellipse プロパティの簡単な例:
<Path Fill="Gold" Stroke="Black" StrokeThickness="1">
<Path.Data>
<EllipseGeometry Center="50,50" RadiusX="{Binding RadiusX}" RadiusY="50" />
</Path.Data>
</Path>
そして、ViewModel (またはMVVM デザイン パターンDataContext
を使用していない場合) で、名前を持つプロパティ (またはを使用して通知可能) を定義します。これを変更すると、ジオメトリ表示が更新されます。INotifyPropertyChanged
DependencyProperty
RadiusX
これは Path Geometry に対しても実行できます。
そのためには、次の 2 つのいずれかを行う必要があります。
1) 上記で説明したタイプのプロパティを持ち、PathGeometry
定期的に使用します。
<Path Data="{Binding PointsForPath}"/>
2)ポイントを希望どおりに保持する別のデータ構造を持ち、ポイントを取得してPathGeomerty
要素を返すコンバーターを使用します。
<Path Data="{Binding Path=PointsForPath, Converter={StaticResource ResourceKey=PointsConverter}}"/>
パスを保存するには:
SQL Server (または同様のもの) を使用している場合は、ジオメトリをテーブルに特別な列として保存するオプションがあります。詳細については、 SQL Geomertyを参照してください。
回答で使用されている用語に関してさらに支援が必要な場合はお知らせください。
ViewModel
DataContext
Binding
DependencyProperty
.