2010-12-10 11 views
4

Ich habe eine abstrakte Klasse erstellt, die von UserControl erbt, und hat eine abstrakte Methode. Ich habe einige Steuerelemente, die diese abstrakte Klasse implementieren. Das Silverlight-Steuerelement funktioniert problemlos, aber im XAML-Editor wird eine InstanceBuilderException ausgelöst, sodass die XAML-Vorschau nicht angezeigt werden kann. Gibt es eine Möglichkeit, dies zu umgehen, oder mache ich nur etwas falsch? Vielen Dank!Silverlight Xaml Editor Fehler beim Erben von einer benutzerdefinierten Klasse

Die abstrakte Klasse ist sehr einfach:

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

Die Implementierung ist hier:

public partial class OnlineUserWidget : Widget 
{ 
..... 
} 

Und die XAML

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

</local:Widget> 

Schließlich ist der Fehler:

kann nicht erstellt werden ein Inst von "Widget". bei Microsoft.Expression.DesignModel.Core.InstanceBuilderOperations.InstantiateType (Typ Typ, Boolean supportInternal, Boolean supportProtected) bei Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.InstantiateTargetType (IInstanceBuilderContext Zusammenhang ViewNode viewNode) bei Microsoft.Expression.DesignModel .InstanceBuilders.ClrObjectInstanceBuilder.Instantiate (IInstanceBuilderContext Zusammenhang ViewNode viewNode) bei Microsoft.Expression.Platform.Silverlight.InstanceBuilders.DependencyObjectInstanceBuilder.Instantiate (IInstanceBuilderContext Zusammenhang ViewNode viewNode) bei Microsoft.Expression.Platform.Silverlight.InstanceBuilders.FrameworkElementInstanceBuilder.Instantiate (IInstanceBuilderContext-Kontext, ViewNode viewNode) bei Microsoft.Expression.Platform.Silverlight.Instance Builders.UserControlInstanceBuilder.Instantiate (IInstanceBuilderContext Zusammenhang ViewNode viewNode) bei MS.Internal.Services.DesignModeValueProviderService.DesignModeValueProviderBuilder.Instantiate (IInstanceBuilderContext Zusammenhang ViewNode viewNode) bei Microsoft.Expression.DesignModel.Core.ViewNodeManager.Instantiate (ViewNode viewNode)

Antwort

1

UserControl ist die falsche Klasse in Situationen wie diesen zu verwenden. Sie werden wahrscheinlich die Kontrolle sehen wollen. Um sicherzustellen, dass Ihr Stil richtig geladen wird, verwenden Sie die folgende Zeile in der Ctor Kontrollen:

this.DefaultStyleKey=typeof(Widget); 

Dann nur sicherstellen, dass Sie haben einen Stil zugewiesen Widget und Sie werden rockin und rollin'. UserControls eignen sich am besten für einmalige Situationen, in denen Sie das Steuerelement nicht erneut erstellen oder von ihm erben müssen.

+0

Ah super, ich wusste nicht über die Kontrolle Kontrolle (hah). Ich werde versuchen, das mit einer Style/Control-Vorlage zu verwenden, danke! – codechinchilla

Verwandte Themen