C# 无效的ResourceDictionary clr命名空间

C# 无效的ResourceDictionary clr命名空间,c#,wpf,C#,Wpf,将ResourceDictionary添加到文件夹时,其clr命名空间无效 将类添加到同一文件夹 [ 纠正错误 如何解析clr命名空间而不必向文件夹中添加类 补遗 注意:删除虚拟类会再次使命名空间无效 Thans Ali Bigdeli 实际上有两个错误: 严重性代码说明项目文件行抑制状态 错误IDE1100读取源文件“C:\path\TS\ResourceDictionaries\RoundButtons.xaml”的内容时出错--“找不到文件“C:\path\TS\ResourceDi

将ResourceDictionary添加到文件夹时,其clr命名空间无效

将类添加到同一文件夹

[

纠正错误

如何解析clr命名空间而不必向文件夹中添加类

补遗 注意:删除虚拟类会再次使命名空间无效

Thans Ali Bigdeli

实际上有两个错误:

严重性代码说明项目文件行抑制状态 错误IDE1100读取源文件“C:\path\TS\ResourceDictionaries\RoundButtons.xaml”的内容时出错--“找不到文件“C:\path\TS\ResourceDictionaries\RoundButtons.xaml”。。TS XamlProject C:\path\TS\ResourceDictionaries\RoundButtons.xaml 1处于活动状态

严重性代码说明项目文件行抑制状态
错误XLS0419未定义CLR命名空间。“CLR命名空间”URI引用了找不到的命名空间“TS.StyleDictionaries”。TS Style1.xaml 4

您需要在提到的命名空间中至少有一个类。
ResourceDictionary可以与codebehind(xaml.cs)文件一起使用

如何使用codebehind添加resourceDictionary
将新项添加到项目时..需要选择Page或UserControl

然后需要更改xaml.cs文件:指定需要从ResourceDictionary继承的命名空间和类名(而不是Page或UserControl)

使用System.Windows;
命名空间TS.styledictionary
{
/// 
///Page1.xaml的交互逻辑
/// 
公共部分类主题:ResourceDictionary
{
公共主题()
{
初始化组件();
}
}
}
在xaml中,您需要将页面替换为ResourceDictionary,另外指定x:Class属性,然后可以指定本地名称空间xaml

<ResourceDictionary x:Class="TS.StyleDictionaries.Theme"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:TS.StyleDictionaries">

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="\Themes\ButtonsStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

p.S。 只有在需要使用clr类型时,才需要指定名称空间。
要使用其他ResourceDictionary中的资源,您可以使用MergedDictionary或将共享ResourceDictionary放在App.xaml中。您不需要在资源字典中使用xmlns引用,它就可以工作

让我们从考虑xmlns正在做什么开始进行解释

当您添加一个xmlns时,该xmlns将把一些编译过的对象拉入内存,以便您可以在资源字典中使用它们。它还将对这些对象进行别名。通常情况下,其中一个默认对象不会这样做,但您自己添加的任何内容都需要这样做

默认情况下,每个资源字典都添加了其中的一些名称空间,以便您可以使用样式之类的东西。这些默认名称空间所引用的是框架的基础

因此


您是否尝试在文件移动后更改名称空间?是的,它会再次使名称空间无效。重建并重新打开您的解决方案/项目如何?@AliBigdeli是的,但返回错误。我已将实际的错误描述添加到我的帖子中。如果该文件夹中只有resourcedictionary,则样式字典中没有任何内容mespace。意思是它不存在。你为什么要在那里添加一个xmlns?唯一的用途是引用编译后的代码。那里没有代码。演示了如何在不需要类的情况下引用ResourceDictionary。足够清楚。我将不得不再看一遍。我看的视频真正让我感到惊讶。他显然添加了一个新的w文件夹和一个新的ResourceDictionary,但没有名称空间错误。我从您的解释推断,他一定在他的项目中的其他地方声明了名称空间。使用wpf有很多东西需要学习。如果您打算进行任何实质性的开发,请将MVVM放在列表顶部附近。祝您好运。
<ResourceDictionary x:Class="TS.StyleDictionaries.Theme"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:TS.StyleDictionaries">

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="\Themes\ButtonsStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Button x:Name="FooButton"
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfApp1"
                    xmlns:sys="clr-namespace:System;assembly=System.Runtime"
                >
    <sys:String x:Key="Submit">Submit</sys:String>
    <local:UserControl1