You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Avalonia与资源文件实现应用动态本地化切换不生效问题求助

AvaloniaUI Resx多语言动态切换不更新解决方案

核心问题根因

Avalonia绑定系统对INotifyPropertyChanged空属性名通知的处理逻辑与WPF存在差异,空属性名通知无法触发索引器绑定的批量更新,是本次问题的核心诱因。

修复步骤

1. 修正翻译源变更通知逻辑

修改TranslationSourceWithMultipleResxFiles类中CurrentCulture属性的setter,主动触发索引器的变更通知,替换原有的空属性名通知:

private CultureInfo _currentCulture;
public CultureInfo CurrentCulture
{
    get => _currentCulture;
    set
    {
        if (Equals(_currentCulture, value)) return;
        _currentCulture = value;
        // 触发索引器批量更新通知,适配Avalonia绑定规则
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(Binding.IndexerName));
        // 可选:同步线程文化,保证后台逻辑也使用对应语言
        Thread.CurrentThread.CurrentCulture = value;
        Thread.CurrentThread.CurrentUICulture = value;
    }
}

2. 修正标记扩展的绑定配置

确保LocExtensionWithMultipleResxFiles返回的绑定显式指定了单向绑定模式,且绑定源指向单例实例:

[MarkupExtensionReturnType(typeof(string))]
public class LocExtensionWithMultipleResxFiles : MarkupExtension
{
    public string Key { get; set; }
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return new Binding
        {
            Source = TranslationSourceWithMultipleResxFiles.Instance,
            Path = $"[{Key}]",
            Mode = BindingMode.OneWay,
            UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
        };
    }
}

3. 修正附加属性的继承配置

如果使用Translation附加属性指定资源管理器,需要开启属性的继承标志,保证子控件可以正确继承父级配置:

public static class TranslationAttachProperties
{
    public static readonly AttachedProperty<ResourceManager> TranslationProperty =
        AvaloniaProperty.RegisterAttached<Control, ResourceManager>(
            "Translation", 
            typeof(TranslationAttachProperties), 
            inherits: true); // 必须开启继承

    public static void SetTranslation(Control element, ResourceManager value)
    {
        element.SetValue(TranslationProperty, value);
    }

    public static ResourceManager GetTranslation(Control element)
    {
        return element.GetValue(TranslationProperty);
    }
}

验证步骤

完成上述修改后,修改TranslationSourceWithMultipleResxFiles.Instance.CurrentCulture即可触发所有绑定的翻译文本自动更新,无需额外刷新界面。

内容的提问来源于stack exchange,提问作者K.Luth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:30:00