gpt4 book ai didi

wpf - 由于无法找到资源,UserControl 不会在设计时呈现?

转载 作者:行者123 更新时间:2023-12-04 20:09:30 24 4
gpt4 key购买 nike

我有一个非常简单的 WPF 项目,设置如下:

enter image description here

MyFoo.xaml 看起来像:

<UserControl xmlns:bar="clr-namespace:WpfApplication1.UserControls" ...>
<Grid>
<bar:MyUserControl />
</Grid>
</UserControl>

Styles.xaml 看起来像:
<Style TargetType="TextBlock">
<Setter Property="Foreground"
Value="Red" />
</Style>

MyUserControl.xaml 看起来像:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<TextBlock Text="Hello world!" />
</Grid>

我的控件不会在设计时呈现,但它在运行时工作正常:

enter image description here
enter image description here

如屏幕截图所示,我收到错误消息:

Cannot locate resource 'styles/styles.xaml'.



我试过将 Styles.xaml 的构建操作设置为“资源”和清理/构建,但它不起作用。

为什么会这样?我如何解决它?

最佳答案

我能够复制这个问题。

背后的道理是:

xmlns:bar="clr-namespace:WpfApplication1.UserControls"

您正在专门为 UserControls 指定命名空间。由于您正在尝试合并 MyUserControl 中的字典它使用位置( Source )指定源,它可以找到资源;但是 Foo.MyFoo 不知道在哪里看。无论设计器尝试在 MyFoo 中实例化 MyUserControl 时发生什么,它都无法解析 Styles.xaml 资源的位置。

要解决这个问题,
  • 拖动您的 Styles文件夹 + Styles.xaml进入 UserControls文件夹。
  • MyUserControl.xaml将您的源路径修复为 <ResourceDictionary Source="Styles/Styles.xaml" />

  • 您现在可以在设计时看到您的控件。

    编辑

    我找到了一种保持项目原样并获得相同结果的方法。
  • 将 Styles.xaml 构建操作设置为 Resource。
  • 更改 Source/WpfApplication1;component/Styles/Styles.xaml
  • 重建

  • 至于 Build Actions 之间的区别, here是个好帖子。

    在 VS2012 中,我得到了异常的 StackTrace,最低级别似乎是 Baml相关(当构建操作设置为页面时创建 Baml)。这是最内部的异常:
    IOException: Cannot locate resource 'styles/styles.xaml'.    at
    MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode,
    FileAccess access) at
    System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess
    access) at
    System.IO.Packaging.PackWebResponse.CachedResponse.GetResponseStream()
    at System.IO.Packaging.PackWebResponse.GetResponseStream() at
    System.IO.Packaging.PackWebResponse.get_ContentType() at
    MS.Internal.WpfWebRequestHelper.GetContentType(WebResponse response)
    at MS.Internal.WpfWebRequestHelper.GetResponseStream(WebRequest
    request, ContentType& contentType) at
    System.Windows.ResourceDictionary.set_Source(Uri value) at
    System.Windows.Baml2006.WpfSharedBamlSchemaContext. <Create_BamlProperty_ResourceDictionary_Source>b__1c4(Object
    target, Object value) at
    System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object
    instance, Object value) at
    MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member,
    Object obj, Object value) at
    MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst,
    XamlMember property, Object value)

    关于wpf - 由于无法找到资源,UserControl 不会在设计时呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20360866/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com