2013-07-17 78 views
0

在Stackoverflow中有類似的問題,但它只解釋瞭如何在XAML中進行更改。我想知道如何在代碼中進行更改。如何在代碼中點擊時更改按鈕的背景圖片?

這裏是顯示圖像我如何使用混合做到在XAML:

Image

鏈接全尺寸:https://snag.gy/4Skk4.jpg

基本上我想更改按鈕的按下狀態的背景在C#中,但我似乎無法在Internet上找到任何示例。它必須在代碼中,因爲有時按鈕的圖像會改變,因此按鈕的按下的圖像也必須改變。

以下代碼僅用於更改按鈕的圖像,它僅僅是開始。

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

@Anon我沒有任何東西,我真的不知道該怎麼做。我試圖找到允許我改變它的按鈕方法,但我找不到任何。 – sparcopt

+0

不能改變按鈕點擊事件上的圖像嗎?那是你想要的嗎? – Botonomous

+0

你能確認你想要改變什麼以及它爲什麼必須在代碼中嗎? –

回答

1

如果我正確地理解了你,你試圖在「按下」可視狀態下改變Button控件的外觀。

我並不靠近我的開發電腦試用它,但爲了「解鎖你」,我會給出一個方向。首先,如您在Blend截圖中注意到的,每個視覺狀態都以Storyboard表示,它定義了各種屬性如何變化。在你的情況下,你正在尋找改變背景屬性。

VisualStateGroups及其狀態由控件定義。當您重新模板控件時,您可以覆蓋它們。因此,使用「編輯模板」 - >「編輯複製」使用混合來重新設置按鈕控件。

然後,在代碼中,你應該能夠做到以下幾點:

1)獲取可視狀態(這是行不通的,除非你重新模板的控制,據我所知)

var visualStateGroups = VisualStateManager.GetVisualStateGroups(buttonWarnings); 

2 )從visualStateGroups獲得 「CommonStates」 的VisualStateGroup 收集

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

3)獲取 「按下」 的VisualState:

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

4)改變該國的故事板

pressedVisualState.Storyboard = newStoryboardWithCustomImageBackgroundProperty; 

免責聲明:我不是附近的計算機現在來試試吧 - 這一切都在理論上)

+0

是的,你明白一切正確:)你的解決方案看起來很有前途,但沒有'find'方法:/ – sparcopt

+0

這是一個集合 - 只是將其轉換爲任何支持Find的集合(我認爲列表確實)。 –

0

其實它很簡單,

而在按鈕按下的狀態....看你上面上傳的圖片中部分3。 以上所有的顏色都有一個包含5個圖標的行。

點擊第4個圖標。 它會告訴你選擇圖像作爲背景的選項。 enter image description here