仅限设计时的错误消息:"Cannot locate resource 'styles/buttonstyles.xaml'"
Error message design time only: "Cannot locate resource 'styles/buttonstyles.xaml'"
在以下情况下会出现一条神秘消息:
找不到资源 'styles/buttonstyles.xaml'
此消息仅在设计模式下出现,无法删除。如果我重建解决方案,错误消息就会消失,直到我打开 ApplicationWindow.xaml.
环境如下:
MainWindow.xaml:
...
<Grid Grid.Row="1">
<controls:CustomToolbar Style="{StaticResource ToolBarStyle}"/>
</Grid>
...
问题指向 controls:CustomToolbar 部分。
CustomToolbar.xaml:
<UserControl x:Class="Frontend.Views.Controls.CustomToolbar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Frontend.Views"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles/ButtonStyles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Views/GlobalStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource ToolbarButton}" Command="{Binding NewProjectCommand}" ToolTip="New project">
<Image Source="{StaticResource NewProject}" Stretch="None" />
</Button>
<StackPanel Orientation="Horizontal">
<Separator Height="20" Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</StackPanel>
</StackPanel>
</UserControl>
如果我更改合并词典的顺序,错误消息会切换到第一个。
我尝试过的:
- google 和 Whosebug 的每个 link
- 清理解决方案,包括删除 bin、obj、.vs 文件夹,然后重建。
- 重启Visual Studio,重启电脑
- 使用完全限定的 URI -> 不起作用,这些字典在当前程序集中。
- 每个 ResourceDictionary 的属性都设置为 BuildAction:Page,并且 MSBuild:Compile
如果我不使用任何 ResourceDictionary,则不会出现错误消息。
编辑 1:
这是项目结构:
HERE
ResourceDict 用法:
HERE
谢谢,
诺伯特
你还没有引入命名空间where
<controls:CustomToolbar Style="{StaticResource ToolBarStyle}"/>
是给程序的。
将以下行添加到 Window 标记
xmlns:controls="clr-namespace:Your name space.Views.Controls"
看到CustomToolbar
的位置,按照上面的代码输入
看来我通过重构 mergedDictionary includes 解决了这个问题,方法如下:
- 从每个控件、样式等中删除了每个 MergedDictionary
- 将它们全部移动到 App.xaml(到根目录)
代码:
<Application x:Class="Frontend.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles/Colours.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/Images.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/ButtonStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/MenuStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/ToolbarStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Views/GlobalStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
我非常有经验的朋友说:
如果您交换 xaml 文件中的包含顺序,可能会发生这种情况,例如:
Style1 在 Resdic1 中定义。
Style2 在 Resdic2 中定义。
Style2 使用 Style1.
但是合并字典中的顺序如下:
- Resdic2
- Resdic1
在以下情况下会出现一条神秘消息: 找不到资源 'styles/buttonstyles.xaml'
此消息仅在设计模式下出现,无法删除。如果我重建解决方案,错误消息就会消失,直到我打开 ApplicationWindow.xaml.
环境如下:
MainWindow.xaml:
...
<Grid Grid.Row="1">
<controls:CustomToolbar Style="{StaticResource ToolBarStyle}"/>
</Grid>
...
问题指向 controls:CustomToolbar 部分。
CustomToolbar.xaml:
<UserControl x:Class="Frontend.Views.Controls.CustomToolbar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Frontend.Views"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles/ButtonStyles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Views/GlobalStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource ToolbarButton}" Command="{Binding NewProjectCommand}" ToolTip="New project">
<Image Source="{StaticResource NewProject}" Stretch="None" />
</Button>
<StackPanel Orientation="Horizontal">
<Separator Height="20" Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</StackPanel>
</StackPanel>
</UserControl>
如果我更改合并词典的顺序,错误消息会切换到第一个。
我尝试过的:
- google 和 Whosebug 的每个 link
- 清理解决方案,包括删除 bin、obj、.vs 文件夹,然后重建。
- 重启Visual Studio,重启电脑
- 使用完全限定的 URI -> 不起作用,这些字典在当前程序集中。
- 每个 ResourceDictionary 的属性都设置为 BuildAction:Page,并且 MSBuild:Compile
如果我不使用任何 ResourceDictionary,则不会出现错误消息。
编辑 1:
这是项目结构: HERE
ResourceDict 用法: HERE
谢谢, 诺伯特
你还没有引入命名空间where
<controls:CustomToolbar Style="{StaticResource ToolBarStyle}"/>
是给程序的。
将以下行添加到 Window 标记
xmlns:controls="clr-namespace:Your name space.Views.Controls"
看到CustomToolbar
的位置,按照上面的代码输入
看来我通过重构 mergedDictionary includes 解决了这个问题,方法如下:
- 从每个控件、样式等中删除了每个 MergedDictionary
- 将它们全部移动到 App.xaml(到根目录)
代码:
<Application x:Class="Frontend.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles/Colours.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/Images.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/ButtonStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/MenuStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Styles/ToolbarStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Views/GlobalStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
我非常有经验的朋友说: 如果您交换 xaml 文件中的包含顺序,可能会发生这种情况,例如:
Style1 在 Resdic1 中定义。 Style2 在 Resdic2 中定义。 Style2 使用 Style1.
但是合并字典中的顺序如下:
- Resdic2
- Resdic1