存储路径几何并稍后更改它

时间:2013-07-10 07:53:42

标签: c# wpf .net-4.0

我正在使用WPF形状来渲染一些几何体。我保存了形状的渲染几何体,并在以后添加它们。现在的问题是我希望有人能够改变几何对象,比如增加形状的高度和宽度。

我知道一种方法,我可以更新字符串并将其分配回几何对象以更新它。

有没有替代或更好的方法来实现同样的目标?

2 个答案:

答案 0 :(得分:0)

椭圆属性的简单示例:

<Path Fill="Gold" Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <EllipseGeometry Center="50,50" RadiusX="{Binding RadiusX}" RadiusY="50" />
  </Path.Data>
</Path>

在您的ViewModel(或DataContext,如果您没有使用 MVVM设计模式)定义一个属性(使用INotifyPropertyChanged或{{1}进行通知})名称为DependencyProperty。现在当你改变它时,它应该更新几何显示。

这也适用于路径几何:

为此你必须要做两件事之一:

1)如上所述具有RadiusX类型的属性并定期使用:

PathGeometry

2)有另一个数据结构,以你想要的方式保存你的点,然后使用转换器,它将获取你的积分并返回<Path Data="{Binding PointsForPath}"/> 元素:

PathGeomerty

保存路径

如果您使用的是SQL Server(或类似的),则可以选择将几何图形作为特殊列存储在表中,有关详细信息: SQL Geomerty

如果您需要有关答案中使用的术语的进一步帮助,请与我们联系:

  • <Path Data="{Binding Path=PointsForPath, Converter={StaticResource ResourceKey=PointsConverter}}"/>

  • ViewModel

  • DataContext

  • Binding

答案 1 :(得分:0)

您可以使用Xaml序列化。

来自the 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);

请注意,有一个some limitations to Xaml serialization,但据我所知,保存和加载几何图形很好。