我正在用WPF和C#制作RPG。我有带有图像的运动按钮。我试图弄清楚如何更改按钮的图像,具体取决于是否有空间可沿该方向移动。我查找了转换器,但是我不确定如何根据情况实现它们。
这是我尝试实现的一个示例,该示例是我在网上找到的:
<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>
我已经具有布尔值的功能,我只是想弄清楚如何实现Converter来更改按钮图像。
我使用了布尔可见性,并希望做类似的事情。
Visibility="{Binding HasMonster, Converter={StaticResource BooleanToVisibility}}"
答案 0 :(得分:0)
更好地将Image元素的Source属性绑定到Button的内容中:
<Button>
<Image Source="{Binding MyBooleanValue,
Converter={StaticResource MyBooleanToImageConverter}}"/>
</Button>
转换器将直接返回BitmapImage。如果图像文件应该是程序集资源(即它们是Visual Studio项目的一部分,并且其Build Action设置为Resource),则必须从Pack 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的资源中:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>