Silverlight - 繼承UserControl的作法

09 May 2012 — Written by Sky Chang
#Silveright#WPF

最近因為公司所逼,所以也開始針對Silverlight上面進行一些系統的開發,而開發的時候也碰到一些問題,所以也順便紀錄一下,不然我大概幾天就忘記怎麼做了…

UserControl是個好物!,但有的時候,還是會有需求繼承一下UserControl,才不會寫了一堆重複的Code,甚至要改一些東西的時候,漏改一堆,而這邊剛好看到國外網站有講到繼承的方法,據說MSDN也有教,但小弟沒搜尋到,如果有找到的人,和小弟說一聲吧XDD。

首先第一步,當然是要做一個UserControl的父類別!我們就取名為Control1吧。

image

第二步,當然是準備要建立繼承父類別的子類別,我們就稱為Control2吧。

image

接下來就是關鍵了,我們要重寫Control2.xaml;這邊的第一件事情,就是要先加上Namespace,也就是xmlns:my=”clr-namespace:這個專案名",然後要把原本的根節點,從UserControl改為繼承的Control1。

<!--這裡要改寫,把原本的UserControl換成Control1,也別忘記了要加上namespace-->
<my:Control1 x:Class="InheritanceUserControl.Control2"
    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"
    mc:Ignorable="d"
    xmlns:my="clr-namespace:InheritanceUserControl"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Button></Button>
    </Grid>
<!--這裡也要改寫-->
</my:Control1>

接下來還要改一下Control2.xaml.cs檔案,把原本繼承於UserControl的地方,改成繼承Control1,這樣就可以了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace InheritanceUserControl
{
    //這裡直接繼承Control1
    public partial class Control2 : Control1
    {
        public Control2()
        {
            InitializeComponent();
        }
    }
}

根據國外所說,這樣改完,Visual Studio會有點不爽XDD,其實這樣改為後,如果編譯的話,會出現這樣的警告,但原則上是不受影響的。( 國外網站也不建議去修改g.i.cs檔案 )

image

這樣就完成了UserControl的繼承,有許多的程式碼,就可以實際的寫在父類別那邊了。

參考資料

Sky & Study4.TW