【问题标题】:C# WPF Serialization XAML with no events没有事件的 C# WPF 序列化 XAML
【发布时间】:2018-01-07 13:39:37
【问题描述】:

我在画布中动态创建了控件,当我序列化 Canvas 事件时,没有序列化。

Label label = new Label();
...
label.MouseLeftButtonDown += Control_MouseLeftButtonDown;
label.MouseLeftButtonUp += Control_MouseLeftButtonUp;
label.MouseMove += Control_MouseMove;
label.MouseLeave += Control_MouseLeave;
...

public static string SerializeXAML(UIElement element)
{
    string strXAML = System.Windows.Markup.XamlWriter.Save(element);
    return strXAML;
}

public static UIElement DeserializeXAML(string XAML)
{
    return System.Windows.Markup.XamlReader.Parse(XAML) as UIElement;
}

序列化字符串:

<Canvas Background="#FFFFFFFF" Name="DesignCanvas" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><Label FontSize="12" Focusable="True" Canvas.Left="363.146190476191" Canvas.Top="179.774339118825" Panel.ZIndex="2">Label</Label></Canvas>

我要&lt;Label ... MouseLeftButtonDown="Control_MouseLeftButtonDown"&gt;text&lt;/Label&gt;

有可能吗? 谢谢

【问题讨论】:

    标签: c# wpf xaml serialization


    【解决方案1】:

    根据下面的 MSDN article,这是不可能的。

    不保留事件处理

    当通过 XAML 添加的事件处理程序被序列化时,它们不会被保留。没有代码隐藏(也没有相关的 x:Code 机制)的 XAML 无法序列化运行时过程逻辑。由于序列化是自包含的并且仅限于逻辑树,因此无法存储事件处理程序。因此,事件处理程序属性,包括属性本身和命名处理程序的字符串值,都将从输出 XAML 中删除。

    【讨论】:

    • 我正要写同样的答案。几乎是一个字一个字。打我呢! :)
    • 哈哈哈,没有苏打水给你;)。
    猜你喜欢
    • 2023-03-13
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多