2017-04-16 3 views
1

Je suis en train de porter une application Silverlight sur l'application UWP Windows 10.UWP hérite d'une classe héritée de UserControl

En grande partie, il possède des contrôles, hérités d'une classe, qui hérite de UserControl.

base: 
public abstract class PartBase : UserControl, IPart, IDisposable 

concrete: 
public sealed partial class MyPart : PartBase 

its XAML: 
<local:PartBase 

J'obtiens l'erreur de compilation: Le nom "PartBase" n'existe pas dans l'espace de noms ..

est-il autorisé dans l'héritage UWP?

+1

L'héritage est hors sujet sur SO? agréable. quel âge avez-vous fils? –

+0

Comment définissez-vous l'espace de noms 'local' dans le XAML de MyPart? –

+0

local représente l'espace de noms dans lequel la PartBase est définie. donc tout va bien. voir mon commentaire sur la réponse @bart - il est plus probable qu'un bogue VS 2017. cela fonctionne dans une application de test, mais pas dans l'application "principale", si je supprime "abstrait" cela fonctionne aussi .. pas juste. –

Répondre

2

Votre code devrait fonctionner. J'ai créé votre classe de base abstraite et un nouveau contrôle basé sur cette classe.

<local:PartBase 
    x:Class="UWPTest.Controls.MyUserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:UWPTest.Controls" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 

    <Grid> 
     <Button>Test</Button> 
    </Grid> 
</local:PartBase> 

Vérifier que le xmlns:local="using:UWPTest.Controls" est correcte avec l'espace de noms PartBase est déclarée. Ensuite reconstruisez votre solution et l'erreur doit disparaître (vous verrez l'erreur si vous ne reconstruisez pas).

Sur une page (par exemple MainPage) Je peux simplement utiliser la commande:

<Page 
    x:Class="UWPTest.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:controls="using:UWPTest.Controls" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <controls:MyUserControl1 /> 
    </Grid> 
</Page> 

Notez le xmlns:controls pointant vers l'espace de noms correct. Le concepteur donnera également une erreur jusqu'à ce que vous reconstruire l'application.

Tout construit ici et l'application s'exécute, donc si vous avez toujours l'erreur après avoir vérifié toutes les déclarations d'espace de noms, vous devrez mettre en ligne un repro pour que nous puissions vérifier ce qui ne va pas.

+0

oui il ressemble à VS2017 bug. Je peux faire ce que j'ai l'intention de faire dans un projet de test mais pas dans mon application. Cependant, si je supprime "abstract" de la définition de la classe de base, cela fonctionne .. –

+0

Bonne nouvelle que vous pouvez aller de l'avant. N'oubliez pas d'envoyer un rapport de bogue rapide afin que Microsoft puisse y jeter un coup d'œil. – Bart

+0

Malheureusement, je ne sais pas pourquoi cela fonctionne dans un exemple d'application et non dans la vraie application .. Et Mme voudrait reproduire. –