使用 XamlReader.Load 动态加载时,遇到解析错误。

后八十生人 2013-04-12 05:30:46
加载的Xaml很简单:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:View="clr-namespace:Carefree.Component.Consumption.VM;assembly=Carefree.Component.Consumption">
<DataTemplate DataType="{x:Type View:ServiceProductConsumptionRecordEditFormViewModel}">
<ContentControl Content="{Binding v}"/>
</DataTemplate>
</ResourceDictionary>


上下文也用 ParserContext 处理好了

关键在于那个属性 v

如果 v=new Button() 一切正常

但如果 v=new Xceed.Wpf.Toolkit.DateTimePicker() 则会报错 设置属性“System.Windows.ResourceDictionary.Source”时引发了异常

感觉是XamlReader.Load方法无法正确处理第三方控件中的资源引用

麻烦大家试试看,这个问题如何解决.谢谢.
...全文
705 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
灵感源于生活 2013-08-10
  • 打赏
  • 举报
回复
XamlReader.Load()加载DX控件都没有问题的,肯定是别的地方出的问题, GridColumn gridColumn = new GridColumn(); StringBuilder strB = new StringBuilder(); strB.Append("<dxg:GridColumn Name='col' Header='第一列' HorizontalHeaderContentAlignment='Center' Width='65' "); strB.Append(" xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'"); strB.Append(" xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'"); strB.Append(" xmlns:dxg='http://schemas.devexpress.com/winfx/2008/xaml/grid' >"); gridColumn = (GridColumn)XamlReader.Load(strB.ToString()); 注意这样加载控件只能返回对象,而且必须在<>里面
biancheng1000 2013-08-01
  • 打赏
  • 举报
回复
我的问题跟你非常的相似,在Winform程序中没有问题,但是在IE下,就报跟你这个一样的问题。我也希望大牛过来解决下
Kation 2013-04-28
  • 打赏
  • 举报
回复
知道WPF的很多 知道XAML的真的很少 我现在围绕XAML技术,有很多难题未解决
后八十生人 2013-04-12
  • 打赏
  • 举报
回复
CSDN没人了还是这个版块没大牛了?
后八十生人 2013-04-12
  • 打赏
  • 举报
回复
求大牛版主MVP之类的来围观一下,看能不能解决,谢了!
后八十生人 2013-04-12
  • 打赏
  • 举报
回复
将Xceed.Wpf.Toolkit的源代码下载过来引入工程后发现,出错在一个自定义控件重载的Control.OnInitialized方法. 其重载的方法中调用了base.OnInitialized(),就是这句出错:

用户代码未处理 System.Xaml.XamlObjectWriterException
  Message=“设置属性“System.Windows.ResourceDictionary.Source”时引发了异常。”,行号为“20”,行位置为“8”。
  Source=System.Xaml
  LineNumber=20
  LinePosition=8
  StackTrace:
       在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
       在 MS.Internal.Xaml.Runtime.PartialTrustTolerantRuntime.SetValue(Object obj, XamlMember property, Object value)
       在 System.Xaml.XamlObjectWriter.SetValue(Object inst, XamlMember property, Object value)
       在 System.Xaml.XamlObjectWriter.Logic_ApplyPropertyValue(ObjectWriterContext ctx, XamlMember prop, Object value, Boolean onParent)
       在 System.Xaml.XamlObjectWriter.Logic_DoAssignmentToParentProperty(ObjectWriterContext ctx)
       在 System.Xaml.XamlObjectWriter.Logic_AssignProvidedValue(ObjectWriterContext ctx)
       在 System.Xaml.XamlObjectWriter.WriteEndMember()
       在 System.Xaml.XamlWriter.WriteNode(XamlReader reader)
       在 System.Xaml.XamlServices.Transform(XamlReader xamlReader, XamlWriter xamlWriter, Boolean closeWriter)
       在 System.Xaml.XamlServices.Transform(XamlReader xamlReader, XamlWriter xamlWriter)
       在 System.Windows.SystemResources.ResourceDictionaries.LoadDictionary(Assembly assembly, String assemblyName, String resourceName, Boolean isTraceEnabled)
       在 System.Windows.SystemResources.ResourceDictionaries.LoadGenericDictionary(Boolean isTraceEnabled)
       在 System.Windows.SystemResources.FindDictionaryResource(Object key, Type typeKey, ResourceKey resourceKey, Boolean isTraceEnabled, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, Boolean& canCache)
       在 System.Windows.SystemResources.FindResourceInternal(Object key, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference)
       在 System.Windows.StyleHelper.GetThemeStyle(FrameworkElement fe, FrameworkContentElement fce)
       在 System.Windows.FrameworkElement.UpdateThemeStyleProperty()
       在 System.Windows.FrameworkElement.OnInitialized(EventArgs e)
       在 Xceed.Wpf.Toolkit.Primitives.UpDownBase`1.OnInitialized(EventArgs e) 位置 F:\Solution\Carefree\ThirdParty\Xceed.Wpf.Toolkit\Core\Primitives\UpDownBase.cs:行号 370
       在 System.Windows.FrameworkElement.TryFireInitialized()
       在 System.Windows.FrameworkElement.EndInit()
       在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType xamlType, Object obj, Boolean begin)
  InnerException: System.NotSupportedException
       Message=无法识别该 URI 前缀。
       Source=System
       StackTrace:
            在 System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
            在 System.Net.WebRequest.Create(Uri requestUri)
            在 MS.Internal.WpfWebRequestHelper.CreateRequest(Uri uri)
            在 System.IO.Packaging.PackWebRequest.GetRequest(Boolean allowPseudoRequest)
            在 System.IO.Packaging.PackWebRequest.GetResponse()
            在 MS.Internal.WpfWebRequestHelper.GetResponse(WebRequest request)
            在 MS.Internal.WpfWebRequestHelper.GetResponseStream(WebRequest request, ContentType& contentType)
            在 System.Windows.ResourceDictionary.set_Source(Uri value)
            在 System.Windows.Baml2006.WpfSharedBamlSchemaContext.<Create_BamlProperty_ResourceDictionary_Source>b__1c4(Object target, Object value)
            在 System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value)
            在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
            在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
       InnerException: 

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧