首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF我的程序有"MarkupExtension对Setter.Value无效“错误,但在运行时工作正常。

WPF我的程序有"MarkupExtension对Setter.Value无效“错误,但在运行时工作正常。
EN

Stack Overflow用户
提问于 2021-04-09 15:26:32
回答 1查看 421关注 0票数 0

仅当我将<ImageSource x:key="...">图像资源文件</ImageSource>添加到</ImageSource>部分时,才会出现此错误。但是,程序在运行时运行良好,没有任何问题。

之前(原始代码=> 0错误):

代码语言:javascript
运行
复制
    <Application.Resources>
        <FontFamily x:Key="NotoBold">
            fonts/NotoSerifCJKtc-Bold.otf#Noto Serif CJK TC Bold
        </FontFamily>

        <Style x:Key="HeaderTitle" TargetType="TextBlock">
            <Setter Property="Grid.Column" Value="0" />
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontSize" Value="18" />
            <Setter Property="FontFamily" Value="{StaticResource NotoBold}" />
            <Setter Property="Foreground" Value="White" />
        </Style>
    ... ...
    ... ...
    ... ...
    </Application.Resources>

后(添加了ImageSource xkey='RedCircle1‘=> 1错误):

代码语言:javascript
运行
复制
    <Application.Resources>
        <FontFamily x:Key="NotoBold">
            fonts/NotoSerifCJKtc-Bold.otf#Noto Serif CJK TC Bold
        </FontFamily>

        <ImageSource x:Key="RedCircle1">
            images/sample/circleRed1.png
        </ImageSource>

        <Style x:Key="HeaderTitle" TargetType="TextBlock">
            <Setter Property="Grid.Column" Value="0" />
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontSize" Value="18" />
            <Setter Property="FontFamily" Value="{StaticResource NotoBold}" />
            <Setter Property="Foreground" Value="White" />
        </Style>
    ... ...
    ... ...
    ... ...
    </Application.Resources>

错误提示出现在<Style x:Key="HeaderTitle" ... >上。如果我将setter value="{StaticResource NotoBold}"更改为其他东西(例如,value="Verdana"),则错误将消失。

错误消息: MarkupExtension对Setter.Value无效。唯一受支持的MarkupExtension类型是DynamicResourceExtension和BindingBase或派生类型。

更新

我的.Net版本是4.8.03752,VisualStudio2019版本是16.8.3。我所有的资源文件(Noto字体和circleRed1.png)它们的构建操作都是“参考资料”。

重新制造问题的步骤。

  • 创建一个新的WPF .NET项目。
  • 将资源(字体和图像)包含到项目中,并将它们构建为“参考资料”。
  • 将源代码复制到<application.resources>部分。(直到这一步,一切都还好,没有出现任何错误消息。)
  • 按"Run“来执行您的程序,会出现一个空白窗口(我们还没有编写xaml代码),然后按”停止“退出调试/运行时。
  • 现在出现错误消息。
  • 将源代码复制到xaml页面并再次运行该程序。
  • 虽然存在一些错误,但程序在运行时运行良好,所有资源(字体和图像)都能正确显示。
  • 错误截图
  • 程序运行时& xaml页面上的错误

我的临时解决方案:

  1. 删除我的StaticResource变量名的一个字符"NotoBold“=> "otoBold”
  2. 现在错误信息变得不能识别"otoBold“.
  3. 撤消编辑"otoBold“=> "NotoBold”
  4. 所有错误信息都消失了。XAML设计器还正确显示Noto字体。

现在每次调试之后,我必须再次修复所有的东西,否则我的xaml设计器视图将无法正确显示(一些控件它们的样式属性不会生效)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 09:10:05

请尝试修改代码如下:

代码语言:javascript
运行
复制
<Setter Property="FontFamily" Value="{DynamicResource NotoBold}" />

在实际运行应用程序之前,StaticResource将在加载XAML期间解析并分配给该属性。它将只分配一次,而对资源字典的任何更改都将被忽略。

在加载过程中,DynamicResource将表达式对象分配给属性,但在请求表达式对象时才实际查找资源。这将延迟查找资源,直到在运行时需要它。您可以根据具体情况分析使用DynamicResource还是StaticResource

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67023951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档