Auf einer XAML UWP-Anwendung, Ive eine Klasse, die Schaltfläche erweitert. Ich habe einen Hintergrund ImageBrush gesetzt.XAML UWP Fokus Backgound auf benutzerdefinierte Schaltfläche
Mein Problem ist, dass, wenn meine Schaltflächen den Fokus oder das Mouseover-Ereignis erhalten, ein graues Rechteck, das mit Schwarz eingefasst ist, auf meiner Schaltfläche erscheint.
Ive versucht eine shitton von viele Lösung von wechselnden Vordergrund modifizierende FocusVisualPrimary/SecondaryBrush auf verschiedene Art von Ereignis (gotFocus
, mouseEntered
, mouseover
). Nichts funktionierte, das beste Ergebnis, das ich bekam, war mit der Einstellung button.Background = "originalBitmapImage"
auf mouseover
Ereignis (Ich erstellte einen neuen ImageBrush mit dem gleichen Bildpfad wie der ursprüngliche Hintergrund dann zugeordnet BackGround), aber das Bild flackert nur, wenn mouseover ausgelöst wird (als Es lädt jedes Mal ein neues Bild).
Hier ist ein Bild, das Problem (links: normale Tasten, rechts: gleiche Taste mit Mouseover): zeigt
Ich möchte das gleiche Bild in dem beide Fall halten, ich bin ein bisschen darüber, wie man das macht.
public class MyButton : Button
{
private static string Image_path = "ms-appx:///assets/Button.png";
public MyButton()
{
ImageBrush brush = new ImageBrush()
{
ImageSource = new BitmapImage(new Uri(MyButton.Image_path))
};
this.Background = brush;
this.PointerEntered += a;
}
// This almost work, but the image is flickering when event is fired
private void a(object sender, PointerRoutedEventArgs e)
{
ImageBrush brush = new ImageBrush()
{
ImageSource = new BitmapImage(new Uri(MyButton.Image_path))
};
//this.Foreground = brush;
this.Background = brush;
}
}
Wenn Sie wollen einfach nur aufhören Flimmern, diese Bilder in einigen externen Feldern speichern. Wenn Sie dieses seltsame Verhalten verhindern möchten, könnten Sie eine Vorlage erstellen, oder noch einfacher ContentControl verwenden und Bild als Inhalt festlegen, oder Border mit seiner Hintergrundeigenschaft – sTrenat