1

我关注了这篇文章:使用自定义 MarkupExtension对我的应用进行国际化的 WPF 应用程序的本地化。

在我的 MainWindow.xaml 我有:

<Button x:Name="ServiceButton" Content="{l:Translate service.button.start}" Click="toggle_service_click" />

如您所见,翻译标记{l:Translate service.button.start}是为了在加载应用程序时在我当前的语言环境资源文件中检索字符串service.button.start,但如果服务已经启动,则标记字符串应该成为service.button.stop

所以,在实践中,当我运行我的应用程序时,如果服务启动:

<Button x:Name="ServiceButton" Content="{l:Translate service.button.stop}" Click="toggle_service_click" />

除此以外

<Button x:Name="ServiceButton" Content="{l:Translate service.button.start}" Click="toggle_service_click" />

在translationManager解析它之前,我如何直接在xaml文件中设置正确的标记“即时”?

编辑: 我试图将它绑定到我的 DataContext 中,如下所示: dataContext

public object ServiceTplString
{
    get
    {
        var isr = ServiceHandler.Instance.serviceIsRunning("service_alias", "service_name");
        return "{l:Translate service.button." + ( (isr) ? "stop" : "start" ) + "}";
    }
}

MainApplication.xaml:

<Button x:Name="ServiceButton" Content="{Binding ServiceTplString}" Click="toggle_service_click" />

但不起作用..

4

1 回答 1

1

你想多了。像您所做的那样绑定到一个对象,ServiceTplString然后只需更改 的值ServiceTplString

ServiceTplString = Resources.StartLabel

或者

ServiceTplString = Resources.StopLabel

取决于你需要什么。

我假设您在资源文件中有国际化文本;你可能有它在别处。

这是您要使用的属性:

private string serviceTplString;

public string ServiceTplString
{
    get
    {
        return serviceTplString;
    }
    set
    {
        serviceTplString = value;
        OnPropertyChanged("ServiceTplString");
    }
}

这样,当您更新其值时,该值将传播到绑定控件。

于 2013-03-18T17:00:53.990 回答