基于布尔值的按钮的C#WPF图像转换器

时间:2018-11-09 19:48:41

标签: c# wpf

我正在用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}}"

1 个答案:

答案 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>