Visual Studio无可用来源

时间:2011-10-28 22:29:02

标签: c# wpf visual-studio-2010

我真的很茫然,并且一直试图找到解决方案几个小时。我搞不清楚了。在我最后一次检查的操作期间,我收到以下异常。

'{DependencyProperty.UnsetValue}' is not a valid value for property 'Foreground'.

我不会把错误发生在哪里。它带我到一个页面,上面写着“No Source Available”,没有别的。我已经尝试通过在各个地方放置断点来定位错误,但是在每次运行期间它似乎在不同的点处失败。 InnerException为null。

我看过this question以及谷歌的各种文章。我无法弄清楚发生了什么,我不知道如何从这里解决问题。 Visual Studio输出似乎没有提供任何更详细的信息,但我会根据请求粘贴它。请,任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:6)

我愿意你缺少资源。如果您执行以下操作:

<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),说:

  

为'System.Windows.StaticResourceExtension'提供一个异常提供的值。行号“6”和行位置“22”。

内部例外:

  

找不到名为'TargetType = System.Windows.FrameworkElement ID = NoSuchResourceKey'的资源。资源名称区分大小写。

这一切都将我们引向真正的问题(缺少资源)。前两个示例没有给我们一个有用的例外的原因是我们没有设置Foreground属性。我们在Value对象上设置Setter属性。因此,当找不到资源时,使用DependencyProperty.UnsetValue。这对Setter.Value属性完全有效。

稍后,当Style应用于Button时,我们会收到异常,因为当DependencyProperty.UnsetValue实际分配给Button.Foreground属性时。

要解决此问题,我会搜索Property="Foreground"的整个解决方案,并查找使用不存在的资源的任何实例。

我应该补充一点,使用DynamicResource时不会出现异常,因为传递给Button.Foreground属性的值是“特殊值”(允许延迟查找)。除非找到资源,否则此“特殊值”不会分配给定的属性。

答案 1 :(得分:1)

你重建了你的项目吗?您的PDB文件可能与您的DLL不匹配,因此VS可能无法加载它们。至于错误本身,可能是对Foreground属性的绑定有问题。