wpf xml 转化对象_如何克隆WPF对象?

MM们

这里有一些很好的答案。很有帮助。我尝试了多种方法来复制绑定信息,包括http://pjlcon.wordpress.com/2011/01/14/change-a-wpf-binding-from-sync-to-async-programatically/中概述的方法,但是这里的信息是Internet上最好的!我创建了一个可重复使用的扩展方法来处理InvalidOperationException“绑定已使用后无法更改。”在我的场景中,我维护着某些人编写的代码,并且在DevExpress DXGrid框架进行了重大升级之后,它不再起作用。以下完美解决了我的问题。我返回对象的代码部分可能会更好,稍后我将对其进行重构。/// /// Extension methods for the WPF Binding class./// public static class BindingExtensions{    public static BindingBase CloneViaXamlSerialization(this BindingBase binding)    {        var sb = new StringBuilder();        var writer = XmlWriter.Create(sb, new XmlWriterSettings        {            Indent = true,            ConformanceLevel = ConformanceLevel.Fragment,            OmitXmlDeclaration = true,            NamespaceHandling = NamespaceHandling.OmitDuplicates,        });        var mgr = new XamlDesignerSerializationManager(writer);        // HERE BE MAGIC!!!        mgr.XamlWriterMode = XamlWriterMode.Expression;        // THERE WERE MAGIC!!!        System.Windows.Markup.XamlWriter.Save(binding, mgr);        StringReader stringReader = new StringReader(sb.ToString());        XmlReader xmlReader = XmlReader.Create(stringReader);        object newBinding = (object)XamlReader.Load(xmlReader);        if (newBinding == null)        {            throw new ArgumentNullException("Binding could not be cloned via Xaml Serialization Stack.");        }        if (newBinding is Binding)        {            return (Binding)newBinding;        }        else if (newBinding is MultiBinding)        {            return (MultiBinding)newBinding;        }        else if (newBinding is PriorityBinding)        {            return (PriorityBinding)newBinding;        }        else        {            throw new InvalidOperationException("Binding could not be cast.");        }    }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值