Kim*_*mbo 15 c# wpf user-controls exception
我有一个wpf usercontrol的问题,这是我自己设计的.问题是object reference not set to an instance of an object,当我在程序中实现usercontrol时,我在设计时遇到XAML代码中的异常.
我该如何修复或压制这个例外?
编辑1
设计师向我展示以下信息:
at Microsoft.Expression.Platform.Platform.InstanceBuilders.Clstform.Platform.Instantiate中的Microsoft.Expression.Platform.InstantiateType(Type type,Boolean supportInternal),Microsoft.Expression.Platform.InstantiateTargetType(IInstanceBuilderContext context,ViewNode viewNode)at Microsoft.Expression.Platform.InstanceBuilders.ClrObjectInstanceBuilder.Instantiate (IInstanceBuilderContext上下文,viewNode viewNode)在Microsoft.Expression.WpfPlatform.InstanceBuilders.FrameworkElementInstanceBuilder.Instantiate(IInstanceBuilderContext上下文,viewNode viewNode)在Microsoft.Expression.WpfPlatform.InstanceBuilders.UserControlInstanceBuilder.Instantiate(IInstanceBuilderContext上下文,viewNode viewNode)在Microsoft.Expression. Platform.InstanceBuilders.ViewNodeManager.CreateInstance(IInstanceBuilder builder,ViewNode viewNode)
我认为他们并没有真正的帮助......
无论构造函数中发生什么,都会在设计时抛出异常.我有同样的问题 - 我只是试着抓住有问题的代码 - 在我的情况下,当我使用IoC容器时,我正在调用ServiceLocator.Current.但在设计时没有容器.所以我用try catch包装来抑制错误并且它有效.不是最好的解决方案......但它是一个解决方案.
我倾向于使用该类LicenseManager来System.ComponentModel避免我的 ViewModel 在设计时抛出令人讨厌的错误。例如:
public MyViewModel()
{
if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)
{
// Do runtime stuff
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
using System.ComponentModel;
using System.Windows;
/// <summary>
/// WPF Design Mode helper class.
/// </summary>
public static class DesignMode
{
private static bool? _isInDesignMode;
/// <summary>
/// Gets a value indicating whether the control is in design mode (running in Blend
/// or Visual Studio).
/// </summary>
public static bool IsInDesignMode
{
get
{
if (!_isInDesignMode.HasValue)
{
var prop = DesignerProperties.IsInDesignModeProperty;
_isInDesignMode
= (bool)DependencyPropertyDescriptor
.FromProperty(prop, typeof(FrameworkElement))
.Metadata.DefaultValue;
}
return _isInDesignMode.Value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,作为视图(或视图模型)构造函数中的第一行,您可以执行以下操作:
if (DesignMode.IsInDesignMode) { return; }
Run Code Online (Sandbox Code Playgroud)
这样您的代码只会在您实际运行时运行。
| 归档时间: |
|
| 查看次数: |
32655 次 |
| 最近记录: |