2011-03-22 65 views
1

我試圖在代碼隱藏中設置圖像背景。我嘗試添加一個背景圖像到按鈕,但只要我將鼠標懸停在按鈕上,圖像就會消失。爲了解決這個問題,我必須編寫函數來覆蓋按鈕的行爲,這在代碼隱藏方面做得太多了。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; 
    } 

回答

1

按鈕WPF中有不同的狀態=「正常」,「鼠標」和「壓」有三個。

當您創建按鈕時,您將設置它爲「正常」狀態。您還需要將「鼠標懸停」狀態設置爲具有相同的圖像。下面

+0

如何將圖像的MOUSE_OVER狀態綁定到按鈕的MOUSE_OVER狀態? – KMC 2011-03-22 10:37:44

+1

@KMC - 我在家裏有這樣的代碼,我會看看我是否可以在今天晚些時候將它挖出來併發布。 – ChrisF 2011-03-22 10:38:49

+0

@ChrisF - 謝謝,這將會非常有幫助。我的另一個擔心是,如果我在懸停或按下按鈕上的圖像時獲得相同的按鈕效果,則需要重寫與默認按鈕相同的Normal,Mouse_Over和Presses狀態事件。或者,我可以在我的新鼠標事件類中繼承默認的鼠標事件類嗎? – KMC 2011-03-22 10:44:43