- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我真的在这里不知所措,并且一直试图找到解决这个问题的几个小时。我迷路了。我在上次检查时正在运行的操作期间遇到以下异常。
“{DependencyProperty.UnsetValue}”不是属性“Foreground”的有效值。
它不会将我带到错误发生的地方。它把我带到一个页面,上面写着“没有可用的资源”,没有别的。我曾尝试通过在不同的地方放置断点来定位错误,但它似乎在每次运行期间都在不同的点失败。 InnerException 为空。
我看过this question ,以及来自谷歌的各种文章。我无法弄清楚发生了什么,也不知道如何从这里进行故障排除。 Visual Studio 输出似乎没有提供任何更详细的信息,但我会根据要求粘贴它。请提供任何帮助。
最佳答案
我愿意成为你缺少的资源。如果您执行以下操作:
<Window x:Name="window" x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="350" Width="525" >
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource NoSuchResourceKey}" />
</Style>
</Window.Resources>
<StackPanel>
<Button Content="Click Me" />
</StackPanel>
</Window>
然后你会得到这样的异常。我们甚至可以使用 ComponentResourceKey 来产生这个异常:
<Style TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=NoSuchResourceKey}}" />
</Style>
这里很少有事情会导致这个问题。通常,在使用 StaticResource
时,您会收到一个编译器错误,指出资源不存在。例如在这种情况下:
<Button Content="Click Me" Foreground="{StaticResource NoSuchResourceKey}" />
如果相反,我们做了:
<Button Content="Click Me" Foreground="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement}, ResourceId=NoSuchResourceKey}}" />
然后你会得到一个不同的异常(XamlParseException),说:
Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '6' and line position '22'.
有一个内部异常(exception):
Cannot find resource named 'TargetType=System.Windows.FrameworkElement ID=NoSuchResourceKey'. Resource names are case sensitive.
这一切都将我们引向了真正的问题(缺少资源)。前两个示例没有给我们有用的异常的原因是我们没有设置 Foreground
属性。我们在 Setter
对象上设置 Value
属性。因此,当找不到资源时,将使用 DependencyProperty.UnsetValue
。这对 Setter.Value
属性完全有效。
稍后,当 Style
应用于 Button
时,我们会得到异常,因为那是 DependencyProperty.UnsetValue
实际分配给的时候Button.Foreground
属性。
为了解决这个问题,我会在您的整个解决方案中搜索 Property="Foreground"
并寻找任何使用不存在资源的实例。
我应该补充一点,使用 DynamicResource
时不会出现异常,因为传递给 Button.Foreground
属性的值是一个“特殊值”(这允许延迟查找)。除非找到资源,否则此“特殊值”不会分配给定的属性。
关于c# - Visual Studio 无可用源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935530/
我是一名优秀的程序员,十分优秀!