C# 使用环境变量作为图像的源路径
我想在我的wpf应用程序中显示一个图像,并从Environment变量中引用它的相对源 我尝试了“{%test%}” 我希望环境变量的正常使用是expandet-like-test=C:\pics,但它在编译时显示了一个错误: 在Windows演示文稿基础中不支持P>%测试%错误 WPF项目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
您可以使用前面提到的@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>