来自静态资源的Wpf窗口标题

Tom*_*aho 5 wpf dictionary window title

我使用资源字典进行本地化,我在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>
Run Code Online (Sandbox Code Playgroud)

我的问题是,我想使用本地化窗口标题 {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>
Run Code Online (Sandbox Code Playgroud)

但是它没有用,因为资源是在title调用它之后定义的.当我尝试运行它时会给我错误

System.Windows.Markup.XamlParseException发生Message ='提供值'System.Windows.StaticResourceExtension'抛出异常.行号"6"和行位置"9".

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

我试图用c#代码调用它,但我没有成功.
我知道有选择:

<Window.Title></Window.Title>
Run Code Online (Sandbox Code Playgroud)

但是没有像文本或价值这样的论点,我可以放在哪里 Text="{StaticResource IT_IS_WORKING}"

Roh*_*ats 6

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

相反,尝试使用DynamicResource哪个是懒惰加载版本,你可以说.它将表达式对象分配给目标属性.这会延迟查找资源,直到在运行时需要它为止.

阅读本文以进一步说明 - StaticResource V/S DyanamicResource.

<Window Title="{DynamicResource IT_WILL_WORK}"/>
Run Code Online (Sandbox Code Playgroud)


She*_*dan 5

只需使用更详细的定义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>
Run Code Online (Sandbox Code Playgroud)