如何在generic.xaml中引用自定义WPF控件
我正在尝试创建一个自定义WPF控件,该控件继承自标准TextBlock,如下所示:如何在generic.xaml中引用自定义WPF控件,wpf,xaml,namespaces,declaration,resourcedictionary,Wpf,Xaml,Namespaces,Declaration,Resourcedictionary,我正在尝试创建一个自定义WPF控件,该控件继承自标准TextBlock,如下所示: public class DynamicDateTextBlock : TextBlock { static DynamicDateTextBlock() { DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicDateTextBlock), new FrameworkPropertyMetadata(typeof(Dyna
public class DynamicDateTextBlock : TextBlock
{
static DynamicDateTextBlock()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicDateTextBlock), new FrameworkPropertyMetadata(typeof(DynamicDateTextBlock)));
}
}
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test">
<Style TargetType="{x:Type local:DynamicDateTextBlock}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:DynamicDateTextBlock}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
相应的generic.xaml如下所示:
public class DynamicDateTextBlock : TextBlock
{
static DynamicDateTextBlock()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicDateTextBlock), new FrameworkPropertyMetadata(typeof(DynamicDateTextBlock)));
}
}
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test">
<Style TargetType="{x:Type local:DynamicDateTextBlock}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:DynamicDateTextBlock}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
如果我把control.cs放在解决方案测试的根目录中,一切都会正常工作。
但是如果我将其移动到子文件夹Test\Controls并相应地更改名称空间,则generic.xaml会突然出现编译错误
名称“DynamicDateTextBlock”在命名空间“clr命名空间:Test.Controls”中不存在
cs命名空间更改为Test.Controls
在xaml中,我尝试这样使用它:xmlns:local=“clr namespace:Test.Controls”
还有什么我必须做的吗
使用Resharper重构控件以移动它也会出现同样的问题 将
DynamicDateTextBlock
移动到Controls
文件夹时,以及更改xmlns:local=“clr namespace:Test.Controls”
后,即使出现错误,也尝试重新生成并运行应用程序。应该启动应用程序。你所有的行动都是正确的
更新:
更改xaml
xmlns:local=“clr namespace:Test.Controls”
后,应手动再次键入。我是手工输入的,没有错误。当您将DynamicDateTextBlock
移动到Controls
文件夹,并且在更改xmlns:local=“clr namespace:Test.Controls”
后,即使出现错误,也尝试重新构建并运行应用程序。应该启动应用程序。你所有的行动都是正确的
更新:
更改xaml
xmlns:local=“clr namespace:Test.Controls”
后,应手动再次键入。我手动键入,没有错误。我是这么想的,但在我移动控件后,它不再编译了:有生成错误。
尝试运行后,错误列表显示了另一个错误:在类型“Test.Controls.DynamicDateTextBlock”上找不到样式属性“Template”。第5行第17位。
@Mikk请查看我的最新答案。请随便问任何问题。这很奇怪,对我来说,在一个新的,否则是空的解决方案中,它甚至不起作用。自动完成提示在intellisense中完全相同。。但我无法生成并运行结果。@Mikk尝试重新启动您的电脑,并手动重复键入,而不是复制xmlns
,这是我的想法,但在我移动控件后,它不再编译了,并给出:有生成错误。
尝试运行后,错误列表显示了另一个错误:在类型“Test.Controls.DynamicDateTextBlock”上找不到样式属性“Template”。第5行第17位。
@Mikk请查看我的最新答案。请随便问任何问题。这很奇怪,对我来说,在一个新的,否则是空的解决方案中,它甚至不起作用。自动完成提示在intellisense中完全相同。。但我无法生成并运行结果。@Mikk尝试重新启动您的电脑并手动重复键入,而不是复制xmlns