Пользовательский базовый класс для WPF-Control - PullRequest
5 голосов
/ 17 мая 2011

Я создал CustomControl для своего проекта и собираюсь создать еще несколько. Все эти элементы управления будут иметь что-то общее, поэтому я создал абстрактный класс, который наследуется от UserControl.

Если я создаю CustomControl через VisualStudio, он также наследуется от UserControl, и я не могу переключить его на свой абстрактный UserControl, потому что VisualStudio добавит некоторые сгенерированные файлы кода. Я не хочу связываться с этими файлами.

Я мог бы просто создать пустой файл кода и написать все самостоятельно, но тогда я не могу использовать XAML (или я просто пока не знаю, как).

Так как мне создать CustomControl с настраиваемым базовым классом без потери XAML?

1 Ответ

12 голосов
/ 18 мая 2011

Во-первых, вы не можете легко использовать абстрактные классы в иерархии классов UserControl - он не работает с конструктором (вы получите сообщение «Невозможно создать экземпляр сообщения« AbstractBase »).та же проблема, и были некоторые обходные пути, все из которых были болезненными.

После удаления «абстрактного» вы сможете ссылаться на свой базовый класс, включив пространство имен в определение 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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...