如何在c#wpf中获取元素的标记?

我正在尝试使用WPF构建一个GUI,我可以在其中绘制一些基本形状并将它们存储到xml文件中。 形状是在xaml文件中设计的,我为每个文件添加了标签。 现在我想在我的代码中获取其标签的值,以便在输出xml文件中存储为属性。

例如,我在我的xaml文件中创建了一个带有名为“RectangleTag”标签的矩形形状,如下所示:

   <Setter Property="Tag" Value="RectangleTag"/  

        

然后在我的代码中我做了:

 XElement myItem = new XElement("Items", from item in designerItems let contentXaml = XamlWriter.Save(((DesignerItem)item).Conent) select new XElement("Item", new XAttribute( "Tag", item.Tag.ToString()) ); 

然后我的GUI停止响应此行。 我相信必须有一些方法来获取标签,但显然不是这种方式。 我怎样才能做到这一点? 它不一定是标签,也不一定是x:Namex:Key ,足以让我区分给定的形状。

我也尝试过这一行:

 new XAttribute("Tag", item.Name) 

但是这会给出一个空字符串,而不是xaml文件中指定的名称。 有人可以帮忙吗? 谢谢。

正如Sheridan所说,你正在从错误的方向攻击这个问题。

首先 – 如果您尚未阅读,则需要阅读: Model-View-ViewModel Explained

您应该创建一组定义形状的Model对象,一组ViewModel对象,它们将它们暴露给View并定义它们的行为,以及一个绑定到ViewModel的View。

这样做的一个关键区别在于,现在你坚持使用XML的逻辑完全不依赖于UI,因此你不必尝试使用像Tag这样的东西传递“魔法值”。

而且,作为一个旁白,我发现绝大多数我都依赖于使用Tag来表示我做错了。 🙂

下面是一个示例:假设您有UI元素是XAML( Button命名为_ btn ),其Tag属性设置为某个值,那么在任何事件句柄(例如Click)中与该元素相关联后面的代码可以获得Tag值如下:

 _btn.Click+=(s,e,)=>{ string _tag = (s as Button).Tag.ToString(); }; 

您可以对案例应用相同的逻辑。 RGDS,