cod*_*lla 5 silverlight inheritance xaml
我创建了一个继承自 UserControl 的抽象类,并具有抽象方法。我有几个实现这个抽象类的控件。Silverlight 控件运行良好,但在 XAML 编辑器中,我抛出了 InstanceBuilderException,因此它不允许我查看 XAML 预览。有没有办法解决这个问题,或者我只是做错了什么?谢谢!
抽象类非常简单:
public abstract class Widget : UserControl
{
public abstract void Close();
}
Run Code Online (Sandbox Code Playgroud)
实施在这里:
public partial class OnlineUserWidget : Widget
{
.....
}
Run Code Online (Sandbox Code Playgroud)
和 XAML
<local:Widget x:Class="Prototype.Widgets.OnlineUserWidget"
xmlns:local="clr-namespace:Prototype.Widgets"
....
</local:Widget>
Run Code Online (Sandbox Code Playgroud)
最后报错:
无法创建“Widget”的实例。在 Microsoft.Expression.DesignModel.Core.InstanceBuilderOperations.InstantiateType(类型类型,布尔型 supportInternal,布尔型 supportProtected) 在 Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.InstantiateTargetType(IInstanceBuilderContext 上下文,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);
Run Code Online (Sandbox Code Playgroud)
然后只要确保你有一个样式分配给小部件,你就会摇滚起来。UserControls 最适合一次性情况,您不需要重新模板化控件或继承它。