我試圖在代碼隱藏中設置圖像背景。我嘗試添加一個背景圖像到按鈕,但只要我將鼠標懸停在按鈕上,圖像就會消失。爲了解決這個問題,我必須編寫函數來覆蓋按鈕的行爲,這在代碼隱藏方面做得太多了。C#代碼中的圖像按鈕
然後我使用另一種方法,即將一個按鈕和一個圖像分別添加到網格單元格。問題是 - 當我點擊圖片時,按鈕不會觸發。
如何使按鈕有懸停和按下效果,即使當鼠標懸停兩種或按下按鈕上的圖像,而不是按鈕的其餘區域?
或希望有人可以建議我一個更好的解決方案。下面是我的代碼。
InitializeComponent();
Button playBtn = new Button();
playBtn.Width = 60;
playBtn.Height = 30;
Image playIcon = new Image();
playIcon.Source = new BitmapImage(new Uri(@"PATH"));
playIcon.Stretch = Stretch.Uniform;
playIcon.Height = 25;
grid1.Children.Add(playBtn);
grid1.Children.Add(playIcon);
Grid.SetColumn(playBtn, 0);
Grid.SetRow(playBtn, 0);
Grid.SetColumn(playIcon, 0);
Grid.SetColumn(playIcon, 0);
感謝大家的意見,在深入挖掘之後,有點解決。我所做的是添加一個網格到Button.Content然後將圖像添加到網格。並使用不透明度爲IsEnable添加灰色失效效果。下面我發佈我的代碼,希望有人發現它有用或改進:
Button playBtn = new Button();
Image playIcon = new Image();
public MainWindow()
{
InitializeComponent();
Grid grid2 = new Grid();
RowDefinition grid2_row1 = new RowDefinition();
ColumnDefinition grid2_col1 = new ColumnDefinition();
grid2.RowDefinitions.Add(grid2_row1);
grid2.ColumnDefinitions.Add(grid2_col1);
playBtn.Width = 60;
playBtn.Height = 30;
playBtn.Click += playBtn_Click;
playIcon.Source = new BitmapImage(new Uri(@"pack://PATH..."));
playIcon.Stretch = Stretch.Uniform;
playIcon.Height = 25;
playBtn.Content = grid2;
grid2.Children.Add(playIcon);
grid1.Children.Add(playBtn);
Grid.SetRow(playIcon, 0);
Grid.SetColumn(playIcon, 0);
}
public void playBtn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello");
}
private void button1_Click(object sender, RoutedEventArgs e)
{
playBtn.IsEnabled = false;
playIcon.Opacity = 0.3;
}
如何將圖像的MOUSE_OVER狀態綁定到按鈕的MOUSE_OVER狀態? – KMC 2011-03-22 10:37:44
@KMC - 我在家裏有這樣的代碼,我會看看我是否可以在今天晚些時候將它挖出來併發布。 – ChrisF 2011-03-22 10:38:49
@ChrisF - 謝謝,這將會非常有幫助。我的另一個擔心是,如果我在懸停或按下按鈕上的圖像時獲得相同的按鈕效果,則需要重寫與默認按鈕相同的Normal,Mouse_Over和Presses狀態事件。或者,我可以在我的新鼠標事件類中繼承默認的鼠標事件類嗎? – KMC 2011-03-22 10:44:43