在事件处理程序"(sender as Button).Content "中获取Xml Content="{Binding XPath=…}"

面临一个问题。按钮上下文使用XML文件标签(动态 资源 DataContext="{DynamicResource XmlResource}"). 一切都很好,我得到了按钮上正确的内容(”名称1″,”名称2″,…)。接下来,在鼠标事件中,我想把按钮内容的值分配给变量 contentText 并将其显示在控制台上。然而,我没有收到预期的。我收到的是 System.Xml.XmlElement 或空字符串。

// XML
<Root>
    <Name1>Name 1</Name1>
    <Name2>Name 2</Name2>
    ...
</Root>

// XAML
<Grid DataContext="{DynamicResource XmlResource}">
    <Button MouseEnter="ButtonEnter" Content="{Binding XPath=Root/Name1}" />
    <Button MouseEnter="ButtonEnter" Content="{Binding XPath=Root/Name2}" />
...
</Grid>

// C#
private void ButtonEnter(object sender, RoutedEventArgs e)
{
    // Version 1
    string contentText = (sender as Button).Content.ToString();
    Console.WriteLine(contentText); // Output value "System.Xml.XmlElement"

    // Version 2
    string contentText = (sender as Button).Content as string;
    Console.WriteLine(contentText); // Output empty string

    // Version 3
    string contentText = sender.GetType().GetProperty("Content").GetValue(sender, null).ToString();
    Console.WriteLine(contentText); // Output value "System.Xml.XmlElement"
}

如何将按钮内容(”名称1″、”名称2″…)附加到 contentText 变量?也许我无法得到准确的值,作为一个动态资源的 DataContext="{DynamicResource XmlResource}"谢谢

解决方案:

输出值 “System.Xml.XmlElement “意味着Content是XmlElement。将Content转为具体类型并获取属性,而不是获取其字符串表示。

var contentElement = (sender as Button).Content as System.Xml.XmlElement;
Console.WriteLine(contentElement.InnerText);

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/40709.html

(0)
上一篇 13小时前
下一篇 13小时前

相关推荐

发表评论

登录后才能评论