我创建了一个从 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/