Я хотел бы создать пользовательский элемент управления на основе StackPanel, поскольку мне нужно добавить некоторый код в производный класс.
Я создал пользовательский элемент управления в Visual Studio.
Когда я хочу использовать пользовательский элемент управления в XAML, я получаю различные ошибки.
Я новичок в WPF.
Можно ли (не) использовать настраиваемый элемент управления WPF так же, как его базовый класс в XAML (в данном случае StackPanel)?
c # код
namespace MyNameSpace
{
public class AbstractForm : StackPanel
{
static AbstractForm()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(AbstractForm), new FrameworkPropertyMetadata(typeof(AbstractForm)));
}
protected override Size MeasureOverride(Size constraint)
{
return base.MeasureOverride(constraint);
}
protected override Size ArrangeOverride(Size arrangeBounds)
{
return base.ArrangeOverride(arrangeBounds);
}
// more code
}
}
Содержимое Generic.xaml (большинство частей создается при создании пользовательского элемента управления):
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNameSpace">
<Style TargetType="{x:Type local:AbstractForm}"
BasedOn = "{StaticResource {x:Type StackPanel}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:AbstractForm}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Затем я пытаюсь использовать «AbstractForm» как StackPanel в MainWindow.xaml:
<Window x:Name="MyApp" x:Class="MyNameSpace.MainWindow"
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:control="clr-namespace:MyNameSpace"
mc:Ignorable="d"
Title="MyApp" BorderBrush="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}">
<StackPanel x:Name="MyAppUI" Orientation = "vertical" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top">
<control:AbstractForm x:Name="HeaderArea" Orientation = "horizontal" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top">
<Image x:Name="appImage" HorizontalAlignment="Left" VerticalAlignment="Top" Source = "AppImage.gif"/>
<StackPanel Orientation = "vertical" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top">
<!-- more content -->
</StackPanel>
</control:AbstractForm>
<!-- more content -->
</StackPanel>
</Window>
При запуске приложения я вижу следующие ошибки
(пытается перевести с немецкого):
- Свойство «Ориентация» не найдено в «AbstractForm»
- Элемент 'Ориентация' не распознан или недоступен
- Свойство «Ориентация» не содержится в пространстве имен XML «clr-namespace: MyNameSpace». Строка ... столбец ...
- Никакой контент не может быть добавлен к объекту типа "AbstractForm" (то есть
<Image
и другому <StackPanel
)