C# WPF Image Converter for Buttons based on Boolean Value










1














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


























    1














    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
























      1












      1








      1







      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


















          0














          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',
          autoActivateHeartbeat: false,
          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









          0














          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















          0














          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













          0












          0








          0






          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

          87.5k885169




          87.5k885169











          • 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
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          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

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ

          Node.js puppeteer - Use values from array in a loop to cycle through pages