C# WPF Image Converter for Buttons based on Boolean Value
up vote
1
down vote
favorite
I am making an RPG in WPF and C#. I have movement buttons with images attached. I am trying to figure out how to change the image of the button depending on if there is a room available to move to in that direction. I have looked up converters but I am not quite sure how to implement them for my situation.
This is one example I have tried to implement that I found online:
<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 = ...,
;
Here is part of the code I am working on
<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
Click="OnClick_MoveNorth">
<StackPanel>
<Image Source= "/Image/Buttons/Up.png"/>
</StackPanel>
</Button>
I already have functions for the boolean values, i am just trying to figure out how to implement a Converter to change the button image.
I have used the Boolean Visibility and hoping to do something similar.
Visibility="Binding HasMonster, Converter=StaticResource BooleanToVisibility"
c# wpf
add a comment |
up vote
1
down vote
favorite
I am making an RPG in WPF and C#. I have movement buttons with images attached. I am trying to figure out how to change the image of the button depending on if there is a room available to move to in that direction. I have looked up converters but I am not quite sure how to implement them for my situation.
This is one example I have tried to implement that I found online:
<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 = ...,
;
Here is part of the code I am working on
<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
Click="OnClick_MoveNorth">
<StackPanel>
<Image Source= "/Image/Buttons/Up.png"/>
</StackPanel>
</Button>
I already have functions for the boolean values, i am just trying to figure out how to implement a Converter to change the button image.
I have used the Boolean Visibility and hoping to do something similar.
Visibility="Binding HasMonster, Converter=StaticResource BooleanToVisibility"
c# wpf
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I am making an RPG in WPF and C#. I have movement buttons with images attached. I am trying to figure out how to change the image of the button depending on if there is a room available to move to in that direction. I have looked up converters but I am not quite sure how to implement them for my situation.
This is one example I have tried to implement that I found online:
<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 = ...,
;
Here is part of the code I am working on
<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
Click="OnClick_MoveNorth">
<StackPanel>
<Image Source= "/Image/Buttons/Up.png"/>
</StackPanel>
</Button>
I already have functions for the boolean values, i am just trying to figure out how to implement a Converter to change the button image.
I have used the Boolean Visibility and hoping to do something similar.
Visibility="Binding HasMonster, Converter=StaticResource BooleanToVisibility"
c# wpf
I am making an RPG in WPF and C#. I have movement buttons with images attached. I am trying to figure out how to change the image of the button depending on if there is a room available to move to in that direction. I have looked up converters but I am not quite sure how to implement them for my situation.
This is one example I have tried to implement that I found online:
<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 = ...,
;
Here is part of the code I am working on
<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
Click="OnClick_MoveNorth">
<StackPanel>
<Image Source= "/Image/Buttons/Up.png"/>
</StackPanel>
</Button>
I already have functions for the boolean values, i am just trying to figure out how to implement a Converter to change the button image.
I have used the Boolean Visibility and hoping to do something similar.
Visibility="Binding HasMonster, Converter=StaticResource BooleanToVisibility"
c# wpf
c# wpf
asked Nov 9 at 19:48
MDiG
154
154
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
Better bind the Source property of an Image element in the Content of the Button:
<Button>
<Image Source="Binding MyBooleanValue,
Converter=StaticResource MyBooleanToImageConverter"/>
</Button>
The converter would directly return a BitmapImage. If the image files are supposed to be assembly resources (i.e. they are part of your Visual Studio project and their Build Action is set to Resource), they must be loaded from Pack URIs:
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();
You would add the converter to the Window's Resources like this:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
Better bind the Source property of an Image element in the Content of the Button:
<Button>
<Image Source="Binding MyBooleanValue,
Converter=StaticResource MyBooleanToImageConverter"/>
</Button>
The converter would directly return a BitmapImage. If the image files are supposed to be assembly resources (i.e. they are part of your Visual Studio project and their Build Action is set to Resource), they must be loaded from Pack URIs:
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();
You would add the converter to the Window's Resources like this:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
add a comment |
up vote
0
down vote
accepted
Better bind the Source property of an Image element in the Content of the Button:
<Button>
<Image Source="Binding MyBooleanValue,
Converter=StaticResource MyBooleanToImageConverter"/>
</Button>
The converter would directly return a BitmapImage. If the image files are supposed to be assembly resources (i.e. they are part of your Visual Studio project and their Build Action is set to Resource), they must be loaded from Pack URIs:
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();
You would add the converter to the Window's Resources like this:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
Better bind the Source property of an Image element in the Content of the Button:
<Button>
<Image Source="Binding MyBooleanValue,
Converter=StaticResource MyBooleanToImageConverter"/>
</Button>
The converter would directly return a BitmapImage. If the image files are supposed to be assembly resources (i.e. they are part of your Visual Studio project and their Build Action is set to Resource), they must be loaded from Pack URIs:
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();
You would add the converter to the Window's Resources like this:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
Better bind the Source property of an Image element in the Content of the Button:
<Button>
<Image Source="Binding MyBooleanValue,
Converter=StaticResource MyBooleanToImageConverter"/>
</Button>
The converter would directly return a BitmapImage. If the image files are supposed to be assembly resources (i.e. they are part of your Visual Studio project and their Build Action is set to Resource), they must be loaded from Pack URIs:
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();
You would add the converter to the Window's Resources like this:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
edited Nov 9 at 20:50
answered Nov 9 at 20:13
Clemens
86.8k884166
86.8k884166
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
add a comment |
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
I feel like I am missing something. What would I put under the Windows.Resource tab? Do I put that function in my main XAML.cs file or make a separate class to hold this? Sorry, I have been starting at examples all day and I feel like it should be simple but I am missing a connection somewhere.
– MDiG
Nov 9 at 20:33
Please see the edited question.
– Clemens
Nov 9 at 20:51
Please see the edited question.
– Clemens
Nov 9 at 20:51
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53232393%2fc-sharp-wpf-image-converter-for-buttons-based-on-boolean-value%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown