C # WPF Image Converter для кнопок на основе логического значения - PullRequest
0 голосов
/ 09 ноября 2018

Я делаю RPG в WPF и C #. У меня есть кнопки с изображениями. Я пытаюсь выяснить, как изменить изображение кнопки в зависимости от того, есть ли место для перемещения в этом направлении. Я искал конвертеры, но я не совсем уверен, как реализовать их в моей ситуации.

Это один пример, который я пытался реализовать, который нашел в Интернете:

<Button Content="{Binding MyBooleanValue, Converter={StaticResource 
MyBooleanToImageConverter}}" />


public object Convert(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture)
{
bool v = (bool)value;

Uri path = new Uri((v ? "ImgSrcIfTrue.png" : "ImgSrcIfFalse.png"), UriKind.Relative);

return new Image()
{
    Source = new System.Windows.Media.Imaging.BitmapImage(path),
Height = ...,
Width = ...,
};

}

Вот часть кода, над которым я работаю

<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
    Click="OnClick_MoveNorth">
   <StackPanel>
 <Image Source= "/Image/Buttons/Up.png"/>
   </StackPanel>
 </Button>

У меня уже есть функции для логических значений, я просто пытаюсь выяснить, как реализовать конвертер для изменения изображения кнопки.

Я использовал Boolean Visibility и надеюсь сделать что-то подобное.

Visibility="{Binding HasMonster, Converter={StaticResource BooleanToVisibility}}"

1 Ответ

0 голосов
/ 09 ноября 2018

Лучше связать свойство Source элемента Image в содержимом кнопки:

<Button>
    <Image Source="{Binding MyBooleanValue,
                    Converter={StaticResource MyBooleanToImageConverter}}"/>
</Button>

Преобразователь будет напрямую возвращать BitmapImage. Если предполагается, что файлы изображений являются ресурсами сборки (т. Е. Они являются частью вашего проекта Visual Studio, а для их Действия сборки установлено значение «Ресурс»), они должны быть загружены из идентификаторов пакетов URI:

public class BooleanToImageConverter : IValueConverter
{
    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        var uri = (bool)value
            ? "pack://application:,,,/ImgSrcIfTrue.png"
            : "pack://application:,,,/ImgSrcIfFalse.png";
        return new BitmapImage(new Uri(uri));
    }

    public object ConvertBack(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Вы бы добавили конвертер в Ресурсы Окна следующим образом:

<Window.Resources>
    <local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
    ...
</Window.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...