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"









share|improve this question

























    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"









    share|improve this question























      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"









      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 19:48









      MDiG

      154




      154






















          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>





          share|improve this answer






















          • 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










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          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

























          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>





          share|improve this answer






















          • 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














          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>





          share|improve this answer






















          • 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












          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>





          share|improve this answer














          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>






          share|improve this answer














          share|improve this answer



          share|improve this answer








          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
















          • 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

















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Kleinkühnau

          Makov (Slowakei)

          Deutsches Schauspielhaus