sparcopt
sparcopt

Reputation: 426

How to change the background image of a button when clicked in code?

There is a similar question like mine here in Stackoverflow but it only explains how to change it in XAML. I want to know how can I change it in code.

Here is a image that shows how I do it in XAML using Blend:

Image

Link for full size: https://snag.gy/4Skk4.jpg

Basically I want to change the background of a button's pressed state in C# but I can't seem to find any examples on the Internet. It must be in code because sometimes the image of the button will change therefore the button's pressed image must change as well.

The following code is just to change the image of the button and it's just the start.

image.ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri(@"images/Button-warning-icon.png", UriKind.Relative));
image.Stretch = Stretch.Uniform;
buttonWarnings.Background = image;

Upvotes: 0

Views: 4990

Answers (3)

Raunaq Patel
Raunaq Patel

Reputation: 280

Actually its quite simple,

While in button pressed state....see part 3 in the image you uploaded above. Above all the colors there is a row containing 5 icons.

Click on 4th icon. it will show you option to choose image as background. enter image description here

Upvotes: 0

Depechie
Depechie

Reputation: 6142

There are many examples to be found on the internet! Take a look at some:

http://mobile.dzone.com/articles/windows-phone-buttonimage http://loekvandenouweland.com/index.php/2011/01/windows-phone-image-button/

Upvotes: 0

New Dev
New Dev

Reputation: 49580

If I understand you correctly, you are trying to change the appearance of the Button control in a "pressed" visual state.

I'm not near my dev computer to try it out, but to "unblock you" I'll give a direction.

First, as you noticed in your Blend screenshot, each visual state is represented with a Storyboard, which defines how various properties change. In your case, you're looking to change Background property.

The VisualStateGroups and their states are defined by the control. You can override them when you re-template the control. So, retemplate the button control using Blend with "Edit Template"->"Edit Copy".

Then, in code, you should be able to do the following:

1) Get visual states (this would not work unless you re-template the control, AFAIK)

var visualStateGroups = VisualStateManager.GetVisualStateGroups(buttonWarnings);

2) Get the VisualStateGroup of "CommonStates" from the visualStateGroups collection

var commonStatesGroup = visualStateGroups.Find((g) => ((VisualStateGroup)g).Name == "CommonStates") as VisualStateGroup;

3) Get the "Pressed" VisualState:

var pressedVisualState = commonStatesGroup.Find((vs) => ((VisualState)vs).Name == "Pressed") as VisualState;

4) Change the storyboard of that state

pressedVisualState.Storyboard = newStoryboardWithCustomImageBackgroundProperty;

(Disclaimer: I'm not near in a computer to try it now - it's all in theory)

Upvotes: 1

Related Questions