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,提示错误