如何在generic.xaml中引用自定义WPF控件

时间:2016-04-17 11:55:36

标签: wpf xaml namespaces declaration resourcedictionary

我正在尝试创建一个自定义的WPF控件,它继承了标准的TextBlock,如下所示:

public class DynamicDateTextBlock : TextBlock
{
    static DynamicDateTextBlock()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(DynamicDateTextBlock), new FrameworkPropertyMetadata(typeof(DynamicDateTextBlock)));
    }
}

相应的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: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放在我的Solution Test的根目录中,一切正常。 但是,如果我将它移动到子文件夹Test \ Controls并相应地更改名称空间,generic.xaml会给出编译错误

  

名称“DynamicDateTextBlock”在命名空间“clr-namespace:Test.Controls”中不存在

cs名称空间变为Test.Controls

在xaml中我尝试使用它:xmlns:local="clr-namespace:Test.Controls"

还有什么我必须做的吗?

使用Resharper重构控件以移动它会产生同样的问题。

1 个答案:

答案 0 :(得分:0)

当您将DynamicDateTextBlock移至Controls文件夹并在更改xmlns:local="clr-namespace:Test.Controls"后尝试重建并运行您的应用程序即使有错误。应该启动应用程序。你所有的行为都是正确的。

<强>更新 更改xaml xmlns:local="clr-namespace:Test.Controls"后,您应该再次输入。我手工输入,没有错误。