C# WPF Image Converter для кнопок на основе логического значения
Я делаю 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 ответ
Лучше связать свойство Source элемента Image в содержимом кнопки:
<Button>
<Image Source="{Binding MyBooleanValue,
Converter={StaticResource MyBooleanToImageConverter}}"/>
</Button>
Конвертер будет напрямую возвращать BitmapImage. Если предполагается, что файлы изображений являются ресурсами сборки (т. Е. Они являются частью вашего проекта Visual Studio, а их Build Action имеет значение Resource), они должны быть загружены из пакетов 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>