C# 使用环境变量作为图像的源路径

C# 使用环境变量作为图像的源路径,c#,wpf,xaml,binding,environment-variables,C#,Wpf,Xaml,Binding,Environment Variables,我想在我的wpf应用程序中显示一个图像,并从Environment变量中引用它的相对源 我尝试了“{%test%}” 我希望环境变量的正常使用是expandet-like-test=C:\pics,但它在编译时显示了一个错误: 在Windows演示文稿基础中不支持P>%测试%错误 WPF项目 您可以使用前面提到的@Clemens之类的视图模型,并将计算出的路径作为属性公开,也可以使用转换器解析路径字符串并最终执行相同的计算。 要将%test%环境变量转换为其实际路径,需要使用 Environme

我想在我的wpf应用程序中显示一个图像,并从Environment变量中引用它的相对源

我尝试了“{%test%}”

我希望环境变量的正常使用是expandet-like-test=C:\pics,但它在编译时显示了一个错误:

在Windows演示文稿基础中不支持P>%测试%错误 WPF项目


您可以使用前面提到的@Clemens之类的视图模型,并将计算出的路径作为属性公开,也可以使用转换器解析路径字符串并最终执行相同的计算。 要将%test%环境变量转换为其实际路径,需要使用 Environment.GetEnvironmentVariabletest


文档:

创建一个转换器,将文件名和环境变量转换为路径:

public class EnvironmentVariableConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Path.Combine(Environment.GetEnvironmentVariable((string)parameter), (string)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}
您应该检查环境变量是否存在,以及对象参数是否为字符串。为了简洁起见,我跳过了这些检查

以下是XAML:

<Window.Resources>
    <l:EnvironmentVariableConverter x:Key="EnvironmentVariableConverter" />
    <s:String x:Key="SD">SD.png</s:String>
</Window.Resources>

<Grid>
    <Image Source="{Binding Source={StaticResource SD},
        Converter={StaticResource EnvironmentVariableConverter},
        ConverterParameter=test}"
        />
</Grid>

SD.png现在是一个资源,因此您可以绑定到它,而不需要单独的视图模型。ConverterParameter传递环境变量的名称。

%%扩展不是C或XAML字符串的功能。您必须在应用程序中实现这一点。使用字符串属性创建视图模型,该属性返回适当的扩展字符串。然后将映像的源属性绑定到视图模型属性。对于使用转换器,您仍然必须使用绑定,因此使用视图模型是不正确的。如果不想使用绑定,可以使用。或者简单地将Image.Source设置在代码后面。
<Window.Resources>
    <l:EnvironmentVariableConverter x:Key="EnvironmentVariableConverter" />
    <s:String x:Key="SD">SD.png</s:String>
</Window.Resources>

<Grid>
    <Image Source="{Binding Source={StaticResource SD},
        Converter={StaticResource EnvironmentVariableConverter},
        ConverterParameter=test}"
        />
</Grid>