.net 根据属性值显示另一个动态资源

.net 根据属性值显示另一个动态资源,.net,wpf,xaml,dynamicresource,.net,Wpf,Xaml,Dynamicresource,在textblock中,我想要一个文本,具体取决于布尔属性的值。 由于应用程序支持多种语言,因此必须使用DynamicSource获取文本 DynamicResources中有两个可用条目,一个用于属性为true时,另一个用于属性为false时 我想在xaml中解决这个问题,以便根据属性的值显示正确的DynamicSource 有人提出了一个想法或这是可能的吗?如何;-? 谢谢。以下是您问题的解决方案 资源字典 更好的选择是创建两个键相同但值不同的语言文件,并在运行时合并适当的文件。在这种情况下

在textblock中,我想要一个文本,具体取决于布尔属性的值。 由于应用程序支持多种语言,因此必须使用DynamicSource获取文本

DynamicResources中有两个可用条目,一个用于属性为true时,另一个用于属性为false时

我想在xaml中解决这个问题,以便根据属性的值显示正确的DynamicSource

有人提出了一个想法或这是可能的吗?如何;-?
谢谢。

以下是您问题的解决方案

资源字典 更好的选择是创建两个键相同但值不同的语言文件,并在运行时合并适当的文件。在这种情况下,您不必每次都检查布尔属性

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:system="clr-namespace:System;assembly=mscorlib"
                    >
    <system:String x:Key="Lang1">Lang1 Message</system:String>
    <system:String x:Key="Lang2">Lang2 Message</system:String>
</ResourceDictionary>
<Application x:Class="MultiLang.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="LangResources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
<Window.Resources>
    <vm:MainWindowViewModel x:Key="mainVM" />
</Window.Resources>

<Grid DataContext="{StaticResource mainVM}">

    <ToggleButton Name="btnLang" IsChecked="{Binding Var}" Content="Change lang" MaxWidth="100" MaxHeight="30">

    </ToggleButton>

    <TextBlock Margin="5" MaxHeight="30" VerticalAlignment="Top">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=DataContext.Var, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}}" Value="True">
                        <Setter Property="Text" Value="{DynamicResource Lang1}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=DataContext.Var, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}}" Value="False">
                        <Setter Property="Text" Value="{DynamicResource Lang2}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock> 
</Grid>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace MultiLang
{
    public class MainWindowViewModel: INotifyPropertyChanged
    {
        private bool _var = false;
        public bool Var
        {
            get { return _var; }
            set
            {
                _var = value;
                OnPropertyChanged("Var");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string name)
        {        
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {

                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }
}