Как создать общий суперкласс для элементов управления xaml? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть приложение xaml / uwp, которое я унаследовал.

Первоначальный разработчик создал несколько элементов управления, расширяющих UserControl. Существует некоторый код, общий для всех этих классов, который он скопировал и вставил в каждый класс. Я хочу реорганизовать такие вещи, чтобы общий код находился в суперклассе.

Я создал суперкласс, но он не работает: компилятор утверждает, что «частичные объявления не должны указывать разные базовые классы».

Я не знаю, что я должен сделать, чтобы это исправить. В файле xaml указан атрибут x: Class, который имеет полное имя нужного класса. Я попытался изменить элемент root с UserControl на имя моего класса (с полным пространством имен), но это тоже не сработало.

В чем прикол? Я уверен, что Microsoft не собиралась для xaml помешать нам создавать иерархии классов.

Спасибо, Фрэнк

1 Ответ

0 голосов
/ 04 февраля 2020

Как создать общий суперкласс для элементов управления xaml?

Для вашего требования вы можете создать абстрактный базовый класс для UserControl. И ключевая процедура - добавить nameapce базового класса в xaml.

Например:

namespace ButtonResourceTest
{
    public sealed partial class CustomUserControl : UserControlBase
    {
        public CustomUserControl()
        {
            this.InitializeComponent();
        }
    }
    public  abstract class UserControlBase : UserControl
    {


    }


}

Xaml

изменить узел UserControl root по умолчанию на local:UserControlBase.

<local:UserControlBase
    x:Class="ButtonResourceTest.CustomUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ButtonResourceTest"
    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>

    </Grid>
</local:UserControlBase>
...