如何用C#替换XAML路径的数据

本文关键字:路径 数据 XAML 替换 何用 | 更新日期: 2023-09-27 18:28:56

我有一个XAML路径。。。

<Path x:Name="test" Stretch="Uniform" Fill="#FF2A2A2A" Data="F1 M 9143.18... Z "/>

我想用C#这样更改"数据"(我有新的路径数据作为字符串)。。。

test.Data = "F1 M 987... Z";

我如何才能为通用应用程序(8.1)实现这一点?

这应该有效,但它不起作用(Windows.UI.Xaml.Media.Geometry不包含"分析"的定义)

test.Data = Geometry.Parse("F1 M 987... Z");

如有任何帮助或指导,我们将不胜感激。

提前谢谢。

好的,谢谢。。。以下是它对我的作用…

<Path x:Name="test" Stretch="Uniform" Fill="#FF2A2A2A" Data="{Binding}"/>
test.DataContext = "F1 M 987... Z";

如何用C#替换XAML路径的数据

如果你想将字符串解析为Geometry,你可以使用XamlReader.Load。一旦你有了Geometry之后,你就可以按照BCdotNet的建议将其绑定(但你可能想触发一个更改通知)或显式设置Data

// Parse the path-format string into a Geometry
Geometry StringToPath(string pathData)
{
    string xamlPath = 
        "<Geometry xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" 
        + pathData + "</Geometry>";
    return Windows.UI.Xaml.Markup.XamlReader.Load(xamlPath) as Geometry;
}
// In some function somewhere...
// Set the path either directly
test.Data = StringToPath("M 282.85714,355.21933 160,260.93361 260,169.50504 448.57143,163.79075 494.28571,286.6479 z");
// Or via data binding
PathGeometry = StringToPath("M 282.85714,355.21933 160,260.93361 260,169.50504 448.57143,163.79075 494.28571,286.6479 z");
//....
// If we want changes to the bound property to take effect we need to fire change notifications
// Otherwise only the initial state will apply
Geometry _geometry;
public Geometry PathGeometry
{
    get
    {
        return _geometry;
    }
    set
    {
        _geometry = value;
        NotifyPropertyChanged("PathGeometry");
    }
}

您需要绑定它。

C#:

public PathGeometry Geometry
{
   get
   {
      return pathGeometry ;
   }
}

XAML:

<Path Data="{Binding Path=chartmaker.Geometry}"/>