Используйте переменные среды в качестве исходного пути для изображения - PullRequest
0 голосов
/ 10 января 2019

Я хочу показать изображение в моем приложении wpf и сослаться на его источник относительно переменной enviromnent.

Я пробовал '{%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" />, но во время компиляции будет отображаться ошибка:

Ошибка "%test%" не поддерживается в Windows Presentation Foundation (WPF).

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Создать конвертер для преобразования имени файла и переменной среды в путь:

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 передает имя переменной среды.

0 голосов
/ 10 января 2019

Вы можете либо использовать модель представления, подобную упомянутой @Clemens, и получить рассчитанный путь как свойство, либо вы можете использовать конвертер, который будет анализировать вашу строку пути и в конечном итоге выполнять те же вычисления. Чтобы преобразовать переменную среды% test% в ее фактический путь, вам нужно использовать Environment.GetEnvironmentVariable("test")

документация: Environment.GetEnvironmentVariable Метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...