C# 像XAML中的基类(本例中为StackPanel)一样使用自定义WPF控件(不)是可能的吗?
我想基于StackPanel创建一个自定义控件,因为我需要向派生类添加一些代码 我在VisualStudio中创建了自定义控件 当我想在XAML中使用自定义控件时,会出现各种错误 我是WPF的新手 是否可以(不)像XAML中的基类一样使用自定义WPF控件(本例中为StackPanel) c#代码为 Generic.xaml内容是(创建自定义控件时生成的大多数部分):C# 像XAML中的基类(本例中为StackPanel)一样使用自定义WPF控件(不)是可能的吗?,c#,wpf,xaml,C#,Wpf,Xaml,我想基于StackPanel创建一个自定义控件,因为我需要向派生类添加一些代码 我在VisualStudio中创建了自定义控件 当我想在XAML中使用自定义控件时,会出现各种错误 我是WPF的新手 是否可以(不)像XAML中的基类一样使用自定义WPF控件(本例中为StackPanel) c#代码为 Generic.xaml内容是(创建自定义控件时生成的大多数部分): 然后,我尝试像MainWindow.xaml中的StackPanel一样使用“AbstractForm”: <Windo
然后,我尝试像MainWindow.xaml中的StackPanel一样使用“AbstractForm”:
<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”中找不到“Orientation”属性
- 元素“方向”不可识别或不可访问
- 属性“方向”不包含在XML命名空间“clr命名空间:MyNameSpace”中。一行专栏李>
- 不能将任何内容添加到“AbstractForm”类型的对象(即,
堆栈面板不是从控件派生的,因此没有
属性。因此,ResourceDictionary不会编译 从默认样式中删除Setter,然后重新生成项目模板
<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}}"> </Style> </ResourceDictionary>
如果您的AbstractForm类需要一个默认样式,这也是值得怀疑的
如果没有,只需删除整个Generic.xaml文件和覆盖DefaultStyleKey属性默认值的静态构造函数。换句话说,只需创建一个从StackPanel派生的类。StackPanel不是从控件派生的,因此没有
属性。因此ResourceDictionary不会堆 从默认样式中删除Setter,然后重新生成项目模板
<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}}"> </Style> </ResourceDictionary>
如果您的AbstractForm类需要一个默认样式,这也是值得怀疑的
如果没有,只需删除整个Generic.xaml文件和覆盖DefaultStyleKey属性默认值的静态构造函数。换句话说,只需创建一个从StackPanel派生的类。请看:。您不能继承xaml部分,只有后面的代码。您可以创建一个自定义控件并将StackPanel添加到xaml??然后在c#代码中扩展StackPanel您不能为
定义控件模板(StackPanel
),因为它不是控件(不是从ControlTemplate
类派生的)。您可以创建将StackPanel作为子控件的自定义/用户控件。这不是初学者级别的任务。您可能会发现此页面及其链接很有趣。请查看:。您不能继承Xaml部分,只能继承后面的代码。您可以创建自定义控件并将StackPanel添加到Xaml??中,然后在c中扩展StackPanel#代码您不能为System.Window.Controls.control
堆栈面板
定义控件模板(
),因为它不是控件(不是从ControlTemplate
类派生的)。您可以创建一个自定义/用户控件,将StackPanel作为子控件。这不是初学者级别的任务。您可能会发现此页面及其链接很有趣。我删除了我接受了答案,但显然我没有适当的投票特权对其进行投票。再次感谢。我删除了我接受了答案,但显然我没有有适当的投票权来投票。再次感谢。System.Window.Controls.control
<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}}"> </Style> </ResourceDictionary>