2011-05-17 46 views
5

我已經創建了自己的項目中CustomControl,我要創建更多一些。所有這些控件都有一些共同點,所以我創建了一個從UserControl繼承的抽象類。定製基類的WPF的控制

如果我通過創建一個VisualStudio中它CustomControl也繼承用戶控件,我不能把那個換成我的抽象用戶控件,因爲VisualStudio中會添加一些生成的代碼文件。我不想惹這些文件。

我可以創建一個空的代碼文件和我自己寫的一切,但我不能使用XAML(或者我只是不知道如何還)。

那麼,如何創建一個自定義的基類CustomControl不失XAML?

回答

12

首先,你不能輕易地在用戶控件類層次結構使用抽象類 - 它不與設計師的工作(你會得到一個「無法創建的實例‘AbstractBase’消息)用於Windows窗體。有相同的問題,並有一些解決方法,所有這些都是痛苦的。所有這些都是痛苦的。

刪除「摘要」後,您應該能夠通過在XAML定義中包含名稱空間來引用您的基類,並更改代碼後面像這樣:

<local:AbstractBase x:Class="Test.ConcreteControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Test" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
    </Grid> 
</local:AbstractBase> 

和:

/// <summary> 
    /// Interaction logic for ConcreteControl.xaml 
    /// </summary> 
    public partial class ConcreteControl : AbstractBase 
    { 
     public ConcreteControl() 
     { 
      InitializeComponent(); 
     } 
    } 

這假定您的基類被稱爲「AbstractBase」

+0

並且沒有更改生成的文件? – 2011-05-17 20:05:50

+0

我相信代碼生成器將只創建將保存對子元素的引用以及將初始化代碼添加到InitializeComponent()方法的字段。 – v00d00 2011-05-17 20:21:11

+0

生成的文件也被自動更改爲繼承AbstractBase形式...非常感謝,micahtan – 2011-05-17 20:29:06