每个字典条目必须有关联的键错误信息
Each dictionary entry must have an associated key error message
有人可以帮我解决这个问题吗,我想我已经正确编码了所需的密钥。这是一个只有一个 Button 的 Style 应用程序字典测试。有两条错误消息:每个字典条目必须有一个关联的键,并且所有添加到 IDictionary 的对象都必须有一个键属性或一些其他类型的键与之关联。第 13 行第 14 行,均用于 MainWIndow.xaml.
此项目中没有更多程序员编写的代码。
这是 MainWindow.xaml 代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary Source="App.xaml" /> This is the offending line
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>
这是 App.xaml 代码:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style x:Key="algo" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>
正如评论中所指出的,引用 ResourceDictionary
的语法是
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
ResourceDictionary
的直接内容被认为是字典的条目。这是缺少 Key
错误所指的地方。字典应该查找其所有条目的键:
<Window.Resources>
<ResourceDictionary>
<conv:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
<conv:BoolToCollapsedConverter x:Key="BoolToCollapsedConverter" />
...
</ResourceDictionary>
</Window.Resources>
规则的一个例外是 implicit Styles(具有 TargetType
而不是 Key
的样式)。
在您的情况下,上述 none 会有所帮助,因为 App.xaml 中的 Resources
被特殊对待。它们被认为是 全球资源 并且可以从任何地方引用。尝试像第一个示例中那样显式引用它们将导致
An error occurred while finding the resource dictionary "App.xaml".
而是将您的 MainWindow.xaml 更改为
<Window x:Class="WpfApplication1.MainWindow"
...
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>
谢谢Funk,谢谢Mathew Jibin,你们的解释让我找到了我认为的解决方案,如下:
修改App.xaml如下:
<Application.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>
并修改了 MainWindow,删除了 Grid 中的所有内容:
...
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
现在,每次我创建一个新按钮时,它都有所需的样式。如果您发现此解决方案有任何可能的问题,请告诉我。谢谢
有人可以帮我解决这个问题吗,我想我已经正确编码了所需的密钥。这是一个只有一个 Button 的 Style 应用程序字典测试。有两条错误消息:每个字典条目必须有一个关联的键,并且所有添加到 IDictionary 的对象都必须有一个键属性或一些其他类型的键与之关联。第 13 行第 14 行,均用于 MainWIndow.xaml.
此项目中没有更多程序员编写的代码。
这是 MainWindow.xaml 代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary Source="App.xaml" /> This is the offending line
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>
这是 App.xaml 代码:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style x:Key="algo" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>
正如评论中所指出的,引用 ResourceDictionary
的语法是
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
ResourceDictionary
的直接内容被认为是字典的条目。这是缺少 Key
错误所指的地方。字典应该查找其所有条目的键:
<Window.Resources>
<ResourceDictionary>
<conv:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
<conv:BoolToCollapsedConverter x:Key="BoolToCollapsedConverter" />
...
</ResourceDictionary>
</Window.Resources>
规则的一个例外是 implicit Styles(具有 TargetType
而不是 Key
的样式)。
在您的情况下,上述 none 会有所帮助,因为 App.xaml 中的 Resources
被特殊对待。它们被认为是 全球资源 并且可以从任何地方引用。尝试像第一个示例中那样显式引用它们将导致
An error occurred while finding the resource dictionary "App.xaml".
而是将您的 MainWindow.xaml 更改为
<Window x:Class="WpfApplication1.MainWindow"
...
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>
谢谢Funk,谢谢Mathew Jibin,你们的解释让我找到了我认为的解决方案,如下:
修改App.xaml如下:
<Application.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>
并修改了 MainWindow,删除了 Grid 中的所有内容:
...
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
现在,每次我创建一个新按钮时,它都有所需的样式。如果您发现此解决方案有任何可能的问题,请告诉我。谢谢