2016-04-04 3 views
1

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

<UserControl x:Class="Genesyslab.Desktop.Modules.ExtensionUtils85.GUI.EmbeddingUserControl" 
      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" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 

    </Grid> 
</UserControl> 

Я попытался распространить это так:

<src:EmbeddingUserControl x:Class="Interaxalab.Desktop.Modules.PrototipoCable.CustomViews.InteractionView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:src="Genesyslab.Desktop.Modules.ExtensionUtils85.GUI" 
    Name="InteractionWorksheetView" Height="321.613" Width="471.396" 
> 
    <Grid> 

     <WindowsFormsHost x:Name="windowsFormsHost1" HorizontalAlignment="Left" Height="284" VerticalAlignment="Top" Width="471"/> 

    </Grid> 
</src:EmbeddingUserControl> 

Однако я получаю сообщение об ошибке, говорящее о том, что название «EmbeddingUserControl» не существует в пространстве имен «Genesyslab.Desktop.Modules.ExtensionUtils85 .GUI».

Название явно существует, так как xaml.cs может его найти, но по какой-то причине xaml не может.

Любая помощь будет оценена по достоинству.

ответ

0

Короче говоря - вы не можете наследовать контроль с помощью xaml другим элементом управления с помощью xaml (и имеет ли смысл даже это делать?). В вашем случае, EmbeddingUserControl не содержит никаких визуальных элементов дерева (просто пустые сетки), так что вы можете просто сделать:

public class EmbeddingUserControl : UserControl { 
    // some methods, properties of your control 
} 

Тогда вы можете наследовать так же, как вы уже в вашем вопросе (не забудьте наследовать от EmbeddingUserControl как в файле xaml, так и в файле с кодом.

Вы также можете наследовать от пользовательского элемента управления с помощью xaml, если унаследованный элемент управления не имеет самого xaml (так что вы можете добавить \ override логику).

Если вам нужно наследовать некоторые визуальные структуры - вам нужно перейти от наследования к композиции. То есть: ваш базовый элемент управления предоставляет некоторые заполнители, где могут быть размещены другие элементы управления, или даже лучше позволяет создавать шаблоны для форматирования элементов данных (например, свойства ItemsControl и ItemTemplate). Затем вы просто заполните эти заполнители другими элементами управления, если это необходимо.

Смежные вопросы