x:在用户控件库中找不到类型

Posted

技术标签:

【中文标题】x:在用户控件库中找不到类型【英文标题】:x:Type not found in user control library 【发布时间】:2012-09-18 08:22:38 【问题描述】:

我正在尝试在 WPF 用户控件库项目中创建 ResourceDictionary。当我添加以下样式时:

<Style TargetType="x:Type Button">
    <Setter Property="Background" Value="StaticResource ResourceKey=GreyBrush"/>
    <Setter Property="BorderBrush" Value="StaticResource ResourceKey=LightBlueBrush"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="StaticResource ResourceKey=OrangeBrush"/>
        </Trigger>
        <EventTrigger RoutedEvent="Click">
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Background.Color" To="StaticResource ResourceKey=LightOrange" Duration="0:0:.1"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

我收到一条错误消息:

The type 'x:Type' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

我将 x 声明为:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

当我在 WPF 应用程序项目中创建资源字典而不是在 UserControl 库项目中创建资源字典时,此方法有效。知道为什么吗?

【问题讨论】:

不知道为什么会这样,解决方法是删除 x:Type 文本,即TargetType="Button"。 Silverlight AFAIK 中也会出现同样的错误。 但并不总是发生。至少上述样式在新创建的(.Net 4.0)WPF用户控件库项目的资源字典中对我来说很好。 我正在使用 VS2012 Professional 并创建一个 .Net 3.5 WPF 用户控件库。 我正在经历完全 FlyingStreudel 在完全相同的上下文中描述的行为。附加观察:如果您创建一个 WPF 应用程序来测试新生成的小部件,(a) 它在运行时工作 (b) 在设计时,单击测试窗口设计表面上的任何地方都会产生 NullReferenceException。正如 AlSki 所述,我的命名空间导入完全 将 UserControl 项目框架版本从 3.5 更改为 4 导致问题消失。 Visual Studio 开始将 x:Type 正确解析为 TypeExtension,如悬停提示所示。但是,该小部件随后无法用于仍然是框架 3.5 的测试项目。令人着迷的是,将小部件改回 fw35 后,我在 XAML 设计器和不再提供 NRE 的测试程序中没有出现错误。 【参考方案1】:

这发生在我编写 IE 扩展并想创建 WPF 用户控件时。由于该项目最初不是 WPF 项目,因此没有对 System.Xaml 的引用,添加所述引用解决了该问题。

【讨论】:

这为我修好了!该项目确实编译了,但总是显示错误(尤其是 Productivity Power Tools 扩展的解决方案资源管理器错误功能)。 遇到了同样的问题/解决方案,但罪魁祸首是“System.Presentation”。【参考方案2】:

在我的项目中遇到了同样的问题。我通过将 Target Framework 从 .NET 3.0 切换到 4.0 解决了这个问题。

【讨论】:

【参考方案3】:

我必须不同意,这是我从一个有效的 UserControl 声明的。

<UserControl x:Class="RedGreenRefactor.View.TestResultsGraph"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

错误是否有可能准确地告诉您出了什么问题?您是否获得了所需的所有引用程序集?

创建一个新的 WPF 应用程序我得到以下信息。

【讨论】:

适用于 3.5 或 4.0 库吗?我猜是 4.0,因为 Microsoft.CSharp 和 System.Xaml 不是 3.5 实际上是 4.5,但您始终可以创建一个新的空 wpf 并比较任何版本 wpf app项目和控件库的引用是一样的。【参考方案4】:

你错过了根

<ResourceDictionary xmlns="..."
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

,即你在哪里定义 x?除此之外

<Style TargetType="Button">

也可以。

【讨论】:

以上是关于x:在用户控件库中找不到类型的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 用户控件库中使用 MaterialDesignInXamlToolkit

C#编写用户自定义控件时,引用web的webservice,提示错误

ASP.NET中找不到listview控件....急..怎么在ASP.NET中添加LISTVIEW控件...

WPF 用户控件库中的 WCF 服务引用

错误错误:在AngularJs中找不到名称为“1”的控件

在页面中找不到控件,但仅在通过 selenium-server 运行时