2017-04-16 35 views
1

我移植Silverlight應用程序到UWP的Windows 10應用程序繼承了一個類繼承。它UWP從用戶控件

很大一部分的控制,從一個類,它從用戶控件繼承繼承。

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

concrete: 
public sealed partial class MyPart : PartBase 

its XAML: 
<local:PartBase 

我得到的編譯錯誤: 「PartBase」 這個名字並不在命名空間中..

就是繼承於UWP允許?

+1

繼承是題外話對SO?不錯。你的兒子多大了? –

+0

如何在MyPart的XAML中定義名稱空間'local'? –

+0

local代表定義PartBase的命名空間。所以一切都很好。看到我對@bart答案的評論 - 這很可能是VS 2017的一個bug。它在測試應用程序中工作,但不在「主」應用程序中,如果我刪除了「抽象」它也可以在那裏工作..不正確。 –

回答

2

您的代碼應該工作。我已經創建了你的抽象基類和一個基於這個類的新控件。

<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> 

仔細檢查了xmlns:local="using:UWPTest.Controls"是與命名空間PartBase在聲明是正確的。然後重建您的解決方案和錯誤應該消失(你會看到錯誤,如果你不重建)。

在一個頁面(例如的MainPage)我可以簡單地使用控制:

<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> 

注意xmlns:controls指向正確的命名空間。設計師也會在重建應用程序之前給出錯誤。

一切都在這裏建立和運行應用程序,所以如果你仍然有錯誤雙重檢查所有namepace聲明之後,你必須把攝製網上,這樣我們可以檢查還有什麼不順心。

+0

是的,它看起來像VS2017的錯誤。我能做的,我打算在測試項目,但不是在我的應用程序。但是,如果我從基類中定義它的工作原理去除「抽象」的.. –

+0

好消息,你可以往前走。不要忘記發佈一個快速的錯誤報告,以便微軟可以查看它。 – Bart

+0

不幸的是,我不知道它爲什麼它在一個示例應用程序,而不是在真正的應用程序..和女士希望重現。 –