When you create your hud, you should set it as a variable in either the character or controller, I typically use the controller but wherever you are calling crouch with the ctrl btn should be fine, Lets call your hud var “MyHud”. Anyway, if you create a function in your Widget, lets say “SetCrouchImage”, and add a bool to the input panel of the function called “isCrouching”.
Then create the slate material similar to what you did in the top image but use the “iscrouching” in the select. Also, instead of setting variables for the images, you can actually just plug the select into the make slate brush image slot and select the images you want from the dropdowns on true and false. If you use vars you have to make sure they are set where the drop down will just pull the selected image.
Finally, drag out a getter to your “CrouchedIcon” image and drag off to set the brush. Plug in the make slate brush you just made. Now lets go to where you call the ctrl button Pressed Release node is.
When you press ctrl call the function “SetCrouchImage” from “MyHud” with “isCrouched” == true, on release call it again with it isCrouched == false. If you create and set “MyHud” in the controller and your “Crouch” btn is in your character, just cast to playerController>YourPlayerController>Get MyHud and call the function.
This way works well and is slightly more efficient since it is not calling the bind function every tick to set the image, just when pressed or released.