Наследование частичных классов пользовательского элемента управления Silverlight

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

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

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

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

спасибо!

1 ответов


вы не можете изменить .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 в них, приспосабливаясь к вашим приложением. Затем отредактируйте следующим образом:

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

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

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