Наследование с частичными классами управления Silverlight - PullRequest
6 голосов
/ 13 мая 2011

Я пытаюсь разрешить нескольким классам наследовать более общий пользовательский элемент управления Silverlight, чтобы избежать избыточности в моем коде.Классы наследуют расширенный элемент управления, который затем наследует класс User Control.Проблема, с которой я столкнулся, заключается в том, что файл ExtendedControlExtension.g.cs восстанавливается каждый раз, когда я компилирую, с неправильным наследованием (он наследует пользовательский контроль, а не мой расширенный контроль).

Обратите внимание, что я унаследовал расширенный элемент управления в файлах .cs и g.cs, но продолжаю использовать тег пользовательского элемента управления в файле .aspx, так как это вызывает ошибку

Ошибка29 Тег 'ExtendedControl' не существует в пространстве имен XML 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'.

Есть ли способ исправить это?

Спасибо!

1 Ответ

9 голосов
/ 13 мая 2011

Вы не можете изменить файл .g.cs, на самом деле это так прямо в файле.Кроме того, неудачно использовать термин «пользовательский контроль», поскольку это означает что-то конкретное, а не то, что вы пытаетесь сделать.Но хорошая новость заключается в том, что то, что вы пытаетесь сделать, возможно.

Получите от UserControl:

public class FancyUserControl : UserControl
{
    // Your added common functionality.
}

, а затем добавьте новый UserControl в свой проект, используянормальный механизм, скажем UserControl1.Затем отредактируйте файлы UserControl.xaml следующим образом:

<local:FancyUserControl x:Class="SilverlightApplication1.UserControl1"
    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:local="clr-namespace:SilverlightApplication1"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">

    </Grid>
</local:FancyUserControl>

, уделив особое внимание трем строкам с local в них, адаптируясь к вашему приложению.Затем отредактируйте файл UserControl1.xaml.cs следующим образом:

public partial class UserControl1 : FancyUserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }
}

и Visual Studio пока не будет довольна, но, наконец, перестройте ваш проект, и все будет хорошо.

Класс UserControl1 теперь является производным от FancyUserControl вместо UserControl, и вы можете начать добавлять свои обычные функции.Чтобы добавить дополнительные элементы управления, вам нужно будет вручную отредактировать XAML и выделенный код один раз после первоначального добавления каждого нового элемента управления в проект.

...