OK, ich eine funktionierende Lösung gefunden - basierend auf der Webseite http://www.codeproject.com/Questions/634111/How-to-remove-Glow-of-Button-on-Mouse-hover-in-WPF
Ein wenig Hintergrund: Dies ist eine Anwendung, die ich mit Java/Netbeans vor etwa zehn Jahren schrieb die ziemlich groß im Laufe der Jahre gewachsen ist. Da Java/Netbeans die s/w-Entwicklung von Desktop-Anwendungen nicht mehr unterstützt, portiere ich es auf Visual Studio WPF C#.
XAML:
<Button x:Name="buttonDigit1" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="30" Height="50"
Click="buttonDigit1_Click" MouseRightButtonDown="buttonDigit1_RightClick" MouseWheel="buttonDigit1_MouseWheelMoved">
<Image Width="30" Height="50"></Image>
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
Das für insgesamt neun Tasten wiederholt. Ein serieller I/O-Thread in einer anderen Klasse liest Daten von einem Radio über einen seriellen Port. Wenn sich die Frequenz des Radios ändert, wird eine Methode in dieser Fensterklasse aufgerufen, um die angezeigte Frequenz zu ändern.
Der C# -Code in der Fensterklasse:
// class global variables
static ImageBrush[] digitBrush = new ImageBrush[10];
static BitmapImage[] digitImage = new BitmapImage[10];
static String radioDigitStyle = " ";
public void displayFrequency(String frequency0)
{
int frequency_int = HowardUtils.frequency_int(frequency0);
String frequency_str = HowardUtils.frequency_str(frequency_int);
textBoxFreqVFOA.Dispatcher.Invoke(new Action(() => {
textBoxFreqVFOA.Text = frequency_str;
}));
// Display the frequency in the digits display on RADIO Control Dialog
String frequency = frequency0.Replace(".", ""); // Eliminate "."s
frequency = HowardUtils.removeLeadingZeros(frequency);// Elmiinate leading 0s
while (frequency.Length < 10) {
// Add leading zeros for 10 digits
frequency = "0" + frequency;
}
if (Global.DEBUG_RADIO) Console.WriteLine("displayFrequency frequency='" + frequency + "'");
String[] digit_str = new String[9];
digit_str[0] = frequency.Substring(1, 1);
digit_str[1] = frequency.Substring(2, 1);
digit_str[2] = frequency.Substring(3, 1);
digit_str[3] = frequency.Substring(4, 1);
digit_str[4] = frequency.Substring(5, 1);
digit_str[5] = frequency.Substring(6, 1);
digit_str[6] = frequency.Substring(7, 1);
digit_str[7] = frequency.Substring(8, 1);
digit_str[8] = frequency.Substring(9, 1);
if (Global.DEBUG_RADIO) {
Console.WriteLine("displayFrequency digit_str=" +
digit_str[0] + digit_str[1] + digit_str[2] +
digit_str[3] + digit_str[4] + digit_str[5] +
digit_str[6] + digit_str[7] + digit_str[8]);
}
int[] digit = new int[9];
int i;
for (i = 0; i < 9; i++) {
if (digit_str[i] == " ") { digit_str[i] = "0"; } // Convert blank to zero.
digit[i] = Convert.ToInt32(digit_str[i]);
}
if (Global.DEBUG_RADIO) Console.WriteLine("debug - digit_str[i]='" +
digit_str[0] + digit_str[1] + digit_str[2] + " " +
digit_str[3] + digit_str[4] + digit_str[5] + " " +
digit_str[6] + digit_str[7] + digit_str[8] + "'"); //xxxxx
if (radioDigitStyle != Global.Settings.GetRadioDigits()) {
// radio digits style has changed.
//ImageBrush[] digitBrush = new ImageBrush[10];
for (i = 0; i < 10; i++) {
digitBrush[i] = new ImageBrush();
}
switch (Global.Settings.GetRadioDigits())
{
case "Blue Black Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCKBLUE.GIF", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCKBLUE.GIF", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCKBLUE.GIF", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCKBLUE.GIF", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCKBLUE.GIF", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCKBLUE.GIF", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCKBLUE.GIF", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCKBLUE.GIF", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCKBLUE.GIF", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCKBLUE.GIF", UriKind.Relative));
break;
case "Computer Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0COMPUTE.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1COMPUTE.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2COMPUTE.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3COMPUTE.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4COMPUTE.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5COMPUTE.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6COMPUTE.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7COMPUTE.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8COMPUTE.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9COMPUTE.gif", UriKind.Relative));
break;
case "Black Yellow Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCK-YLW.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCK-YLW.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCK-YLW.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCK-YLW.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCK-YLW.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCK-YLW.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCK-YLW.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCK-YLW.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCK-YLW.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCK-YLW.gif", UriKind.Relative));
break;
case "Black Turq Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCKTURQ.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCKTURQ.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCKTURQ.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCKTURQ.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCKTURQ.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCKTURQ.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCKTURQ.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCKTURQ.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCKTURQ.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCKTURQ.gif", UriKind.Relative));
break;
case "Black Red Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCK-RED.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCK-RED.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCK-RED.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCK-RED.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCK-RED.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCK-RED.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCK-RED.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCK-RED.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCK-RED.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCK-RED.gif", UriKind.Relative));
break;
case "Black Pink Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCKPINK.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCKPINK.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCKPINK.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCKPINK.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCKPINK.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCKPINK.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCKPINK.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCKPINK.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCKPINK.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCKPINK.gif", UriKind.Relative));
break;
case "Black Orange Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCKORNG.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCKORNG.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCKORNG.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCKORNG.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCKORNG.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCKORNG.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCKORNG.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCKORNG.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCKORNG.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCKORNG.gif", UriKind.Relative));
break;
case "Black Old Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0BCK-OLD.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1BCK-OLD.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2BCK-OLD.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3BCK-OLD.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4BCK-OLD.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5BCK-OLD.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6BCK-OLD.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7BCK-OLD.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8BCK-OLD.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9BCK-OLD.gif", UriKind.Relative));
break;
case "EVA01 Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0EVA00.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1EVA00.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2EVA00.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3EVA00.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4EVA00.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5EVA00.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6EVA00.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7EVA00.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8EVA00.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9EVA00.gif", UriKind.Relative));
break;
case "DigitF Digits":
digitImage[0] = new BitmapImage(new Uri("digits/0DIGIF.gif", UriKind.Relative));
digitImage[1] = new BitmapImage(new Uri("digits/1DIGIF.gif", UriKind.Relative));
digitImage[2] = new BitmapImage(new Uri("digits/2DIGIF.gif", UriKind.Relative));
digitImage[3] = new BitmapImage(new Uri("digits/3DIGIF.gif", UriKind.Relative));
digitImage[4] = new BitmapImage(new Uri("digits/4DIGIF.gif", UriKind.Relative));
digitImage[5] = new BitmapImage(new Uri("digits/5DIGIF.gif", UriKind.Relative));
digitImage[6] = new BitmapImage(new Uri("digits/6DIGIF.gif", UriKind.Relative));
digitImage[7] = new BitmapImage(new Uri("digits/7DIGIF.gif", UriKind.Relative));
digitImage[8] = new BitmapImage(new Uri("digits/8DIGIF.gif", UriKind.Relative));
digitImage[9] = new BitmapImage(new Uri("digits/9DIGIF.gif", UriKind.Relative));
break;
} //end switch
for (i=0; i<10; i++) {
digitBrush[i] = new ImageBrush(digitImage[i]);
}
//
radioDigitStyle = Global.Settings.GetRadioDigits();
} // end of radio digits style has changed.
System.Windows.Controls.Button[] radioDigitButtons = {
buttonDigit1,
buttonDigit2,
buttonDigit3,
buttonDigit4,
buttonDigit5,
buttonDigit6,
buttonDigit7,
buttonDigit8,
buttonDigit9 };
for (i = 0; i < 9; i++) {
buttonDigit1.Dispatcher.Invoke(new Action(() =>
{
radioDigitButtons[i].Background = digitBrush[digit[i]];
}));
}
RadioUtils.DisplayVFOFrequency();
} // end displayFrequency(String frequency0)
Der Benutzer auf eine Ziffer links klicken kann den Frequenzwert und Rechtsklick auf einen Wert zu erhöhen den Wert zu verringern.Auch das Mausrad kann das gleiche tun. Aber, ich habe den Code dafür nicht gezeigt.
Die erste Antwort löste das Problem, aber würde einfach nicht funktionieren, wenn innerhalb einer öffentlichen Methode aus einer anderen Klasse aufgerufen werden soll. Die Information war jedoch nützlich und änderte meine Internetsuche nach einer Lösung.
Ich habe diesen Code seit Tagen gehämmert, um eine Lösung zu finden, und ja, es kann verbessert werden.
Höchstwahrscheinlich erbt Ihr Xaml-Hover-Schablonenstil von der Nicht-Hover-Vorlage, während die Zuweisung aus Code nur den Nicht-Hover-Schaltflächenstil ändert. – Filburt
Werfen Sie einen Blick auf diese [Antwort] (http://Stackoverflow.com/a/2902861/479512), um zu sehen, ob es für Sie funktioniert. –