【问题标题】:Wpf window title from static resource来自静态资源的 Wpf 窗口标题
【发布时间】:2013-11-07 15:38:33
【问题描述】:

我正在使用资源字典进行本地化,我在 wpf 中有这段代码:

<Window x:Class="RWIS_WPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="RWIS" Height="500" Width="800" MinHeight="500" MinWidth="800">

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Localizations/Dictionary.EN.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

我的问题是,我想使用 {StaticResource mW_screen1} 本地化窗口标题

    <Window x:Class="RWIS_WPF.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            Title="{StaticResource IT_IS_NOT_WORKING}" Height="500" Width="800"
            MinHeight="500" MinWidth="800">

            <Window.Resources>
              <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Localizations/Dictionary.EN.xaml" />
                </ResourceDictionary.MergedDictionaries>
             </ResourceDictionary>
            </Window.Resources>
            <TextBlock Text="{StaticResource IT_IS_WORKING}"></TextBlock>

但它不起作用,因为资源是在标题调用它之后定义的。当我尝试运行它时它会给我错误

System.Windows.Markup.XamlParseException 发生 Message='Provide 'System.Windows.StaticResourceExtension' 上的值引发了异常。 行号“6”和行位置“9”。

它适用于标题,添加资源后的文本

我曾尝试在 C# 代码中调用它,但我没有成功。
我知道有选择:

<Window.Title></Window.Title>

但是没有文本或值之类的参数,我可以将Text="{StaticResource IT_IS_WORKING}"放在哪里

【问题讨论】:

    标签: wpf dictionary window title


    【解决方案1】:

    StaticResource 在将 BAML(已编译的 XAML)加载到内存时应用,parses XAML from top to bottom 并且由于您的资源尚未创建,因此在加载 XAML 时会引发错误。

    请尝试使用DynamicResource,这是您可以说的延迟加载版本。它将表达式对象分配给目标属性。这会延迟查找资源,直到运行时需要它。

    阅读此内容以获得进一步说明 - StaticResource V/S DyanamicResource

    <Window Title="{DynamicResource IT_WILL_WORK}"/>
    

    【讨论】:

    • 我知道我现在是“那个人”,但是……这应该是公认的答案
    【解决方案2】:

    只需使用更详细的StaticResource 定义:

    xmlns:System="clr-namespace:System;assembly=mscorlib"
    
    ...
    
    <Window.Resources>
        <System:String x:Key="Title">Some Title</System:String>
        ...
    </Window.Resources>
    <Window.Title>
        <StaticResource ResourceKey="Title" />
    </Window.Title>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2022-12-04
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多