Bild-Schaltfläche in C# Code-behind
Ich versuche ein Bild im hintergrund in code-behind. Ich habe versucht, das hinzufügen eines hintergrund-Bild für die Schaltfläche, aber sobald ich den Mauszeiger über der Schaltfläche, wird das Bild verschwindet. Um dieses Problem zu lösen, ich muss schreiben, Funktionen zu überschreiben, den button Verhalten, was ist zu viel zu tun im code-behind.
Ich dann eine alternative Methode verwenden, fügen Sie eine Schaltfläche und ein Bild einzeln, um zu einer grid-Zelle. Das Problem ist, wenn ich auf das Bild klicken, wird der button nicht ausgelöst.
Wie mache ich die Taste, um die hover und gedrückt Wirkung, auch wenn die Maus ist entweder schwebt oder Pressen das Bild auf dem button, aber nicht den restlichen Bereich des Buttons?
Oder hoffe, jemand kann mir empfehlen eine bessere Lösung.Unten ist mein code.
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);
Dank für jeden input, nach dem Graben mehr hinein, es Art von Arbeit aus. Was ich getan habe ist, fügen Sie ein Grid zu - Taste.Inhalt dann füge das Bild in das Raster. Und mit Deckkraft hinzufügen, der Grau-out-Effekt für IsEnable falschen Staat. Unten poste ich mein code, hoffe, dass jemand es nützlich finden, oder verbessern Sie auf:
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;
}
InformationsquelleAutor KMC | 2011-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die links unten
http://blogs.msdn.com/b/knom/archive/2007/10/31/wpf-control-development-3-ways-to-build-an-imagebutton.aspx
http://www.hardcodet.net/2009/01/create-wpf-image-button-through-attached-properties
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/91df562f-414c-4326-ac65-42ef301b5f8f/
InformationsquelleAutor biju
Buttons in WPF unterschiedliche Zustände = "normal", "Maus-über" und "gedrückt" sind drei.
Beim erstellen der Taste, die Sie einrichten, es ist "normal" - Zustand. Sie müssen auch die "mouse over" - Status zu haben, das gleiche Bild als gut.
Ich habe code, der dies tut zu Hause, ich werde sehen, ob ich kann Graben Sie es aus und poste es später heute.
vielen Dank, das wäre sehr hilfreich. Meine andere Sorge ist, wenn ich um den gleichen button-Effekt, wenn ich schweben, oder drücken Sie die Bild auf den button, werde ich neu schreiben müssen die gleiche Normale, Mouse_Over und Pressen Staat Ereignis, das eine Standard-Schaltfläche hat. Oder kann ich Erben die Standard-Maus-Ereignis, Klasse in meiner neuen Maus-event-Klasse?
es gibt verschiedene Möglichkeiten, dies zu tun. Ist man auf der Schaltfläche Bearbeiten template-code in der XAML-Code. Sie sollten nicht, um doppelten code.
sowohl die Taste und das Bild wird generiert, in der run-time. Keine XAML zu arbeiten. Mit der code-hinter, ich habe keine Ahnung, was der Schritt sollte ich nehmen.
InformationsquelleAutor ChrisF