我创建了一个从 UserControl 继承的抽象类,并有一个抽象方法。我有几个控件实现了这个抽象类。 Silverlight 控件运行良好,但在 XAML 编辑器中,我抛出了 InstanceBuilderException,因此它不会让我查看 XAML 预览。有没有办法解决这个问题,或者我只是做错了什么?谢谢!

抽象类非常简单:

public abstract class Widget : UserControl
{
    public abstract void Close();
}

实现在这里:
public partial class OnlineUserWidget : Widget
{
 .....
}

和 XAML
<local:Widget x:Class="Prototype.Widgets.OnlineUserWidget"
    xmlns:local="clr-namespace:Prototype.Widgets"
 ....

 </local:Widget>

最后报错:

无法创建“Widget”的实例。
在 Microsoft.Expression.DesignModel.Core.InstanceBuilderOperations.InstantiateType(Type type, Boolean supportInternal, Boolean supportProtected)
在 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.InstantiateTargetType(IInstanceBuilderContext context, ViewNode viewNode)
在 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
在 Microsoft.Expression.Platform.Silverlight.InstanceBuilders.DependencyObjectInstanceBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
在 Microsoft.Expression.Platform.Silverlight.InstanceBuilders.FrameworkElementInstanceBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
在 Microsoft.Expression.Platform.Silverlight.InstanceBuilders.UserControlInstanceBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
在 MS.Internal.Services.DesignModeValueProviderService.DesignModeValueProviderBuilder.Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
在 Microsoft.Expression.DesignModel.Core.ViewNodeManager.Instantiate(ViewNode viewNode)

最佳答案

UserControl 是在此类情况下使用的错误类。你可能想看看控制。要确保您的样式正确加载,请在控件中使用以下行:

this.DefaultStyleKey=typeof(Widget);

然后只需确保您为小部件分配了一个样式,您就会开始摇滚。 UserControls 最适用于不需要重新模板化控件或从它继承的一次性情况。

关于从自定义类继承时 Silverlight Xaml 编辑器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4411151/

10-13 03:23