用户控件库中找不到 x:Type。

17

我正在尝试在WPF UserControl Library项目中创建一个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应用程序项目中创建资源字典时,这个方法是有效的,但在用户控件库项目中却无效。有什么想法为什么会这样?


不知道为什么会发生这种情况,解决方法是只需删除{x:Type}文本,即TargetType="Button"。据我所知,在Silverlight中也会出现同样的错误。 - Patrick
但并不总是发生。至少在新创建的(.Net 4.0)WPF用户控件库项目中,上述样式对我很有效,在资源字典中也可以正常工作。 - Clemens
我正在使用VS2012专业版创建一个.Net 3.5 WPF用户控件库。 - FlyingStreudel
我正在完全相同的上下文中经历FlyingStreudel所描述的行为。另外观察到:如果创建一个WPF应用程序来测试新创建的小部件,(a)它在运行时工作(b)在设计时,在测试窗口的设计表面上单击会产生NullReferenceException。我的命名空间导入与AlSki所描述的完全相同。 - Peter Wone
将UserControl项目框架版本从3.5更改为4后,问题消失了。 Visual Studio开始正确地将x:Type解析为TypeExtension,如悬停提示所示。然而,该小部件随后无法与仍为框架3.5的测试项目一起使用。有趣的是,将小部件改回fw35后,XAML设计器中没有错误,并且测试程序不再出现NRE。 - Peter Wone
但是重新启动Visual Studio会使我们回到原点。因此,我认为这是设计师及其解决问题的方式,或者至少是默认3.5项目的配置存在问题。 - Peter Wone
4个回答

42

当我编写IE扩展并想要创建WPF用户控件时,出现了这个问题。由于该项目最初不是WPF项目,因此没有对 System.Xaml 的引用,添加该引用修复了该问题。


1
这个对我有用!项目编译了,但总是显示错误(特别是在Productivity Power Tools扩展的Solution Explorer Errors功能中非常烦人)。 - yourbuddypal
1
遇到了相同的问题/解决方案,但罪魁祸首是“System.Presentation”。 - Bruno Brant

3

我在项目中遇到了相同的外观问题。我通过将目标框架从.NET 3.0切换到4.0来解决它。


1

我不得不反对,这是我的一个工作的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 应用程序时,我遇到了以下问题。

WPF default references


这是针对3.5还是4.0库的?我猜测是4.0,因为Microsoft.CSharp和System.Xaml不属于3.5。 - FlyingStreudel
实际上是4.5,但您可以随时创建一个新的空白WPF并比较任何版本。 - AlSki
WPF 应用程序项目和控件库之间的引用是相同的。 - FlyingStreudel

0

你是否缺少根节点

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

也就是说,你在哪里定义了x?除此之外

<Style TargetType="Button">

同样适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接