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

时间:2019-01-10 12:14:08

标签: c# wpf xaml binding environment-variables

我想在我的wpf应用程序中显示图像,并从环境变量中引用其相对源。

我尝试了'{%test%}'

<Image Source="{%test%}\SD.png" Width="24" Height="24" Margin="2" />

我希望正常使用环境变量会像(test =“ C:\ pics”)<Image Source="C:\pics\SD.png" Width="24" Height="24" Margin="2" />这样展开,但在编译时会显示错误:

  Windows Presentation Foundation不支持

%test%”错误   (WPF)项目。

2 个答案:

答案 0 :(得分:1)

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

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传递环境变量的名称。

答案 1 :(得分:0)

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

文档:Environment.GetEnvironmentVariable Method

相关问题