2008-12-30 10 views
3

Dans Silverlight 2 J'ai la déclaration de classe suivante pour un contrôle:Dérivation de UserControl dans Silverlight

public partial class ClassX : UserControl 

Je souhaite remplacer UserControl avec ClassXBase qui dérive de UserControl mais j'obtiens l'erreur raisonnable « déclarations partielles de 'ClassX' ne doit pas spécifier des classes de base différentes "

Cependant, je suis incapable de trouver l'autre classe partielle pour remplacer sa classe de base. Toute idée où cette autre classe partielle est ou comment je fais cela?

Répondre

3

La classe partielle UserControl est définie par le code XAML et la structure s'attend à ce qu'elle soit dérivée de UserControl. Qu'est-ce que vous essayez d'accomplir? Vous feriez mieux d'utiliser l'encapsulation plutôt que l'héritage. Si vous devez utiliser l'héritage, alors cherchez à dériver des autres. Il serait peut-être préférable de dériver de l'une des autres classes de contrôle comme ContentControl ou Control. Jesse Liberty fait un great series of videos sur cela au Silverlight.net.

12

Si vous incluez l'espace de noms de votre classe de base de UserControl, vous pouvez le faire tant que vous utilisez l'espace de noms. Par exemple:

public abstract class MyBaseUserControl : UserControl 
{ 
    // ... 
} 

Ensuite, vous devez utiliser cette classe dans le XAML (Notez le mon espace de noms et puis en utilisant le nouvel espace de noms comme la racine du document):

<!-- Page.xaml --> 
<my:BaseUserControl 
    x:Class="SilverlightApplication11.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:my="clr-namespace:SilverlightApplication11" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 

    </Grid> 
</my:BaseUserControl> 

Ce ne sera pas changez magiquement la classe de base dans le code-behind alors changez ce code pour votre classe de base:

public partial class Page : BaseUserControl 
{ 
    public Page() 
    { 
    InitializeComponent(); 
    } 
} 
+0

Cela a fonctionné parfaitement. Je vous remercie. –

+0

Ou mieux encore, supprimez la déclaration de classe de base de votre code-behind tout à fait. –

Questions connexes