J'essaie de travailler avec le contrôle WebBrowser dans un Winforms parce que je veux vraiment utiliser HTML5/CSS pour styliser une interface graphique (je me contente d'utiliser les événements en C#). Mais un style de survol ne fonctionne pas.
Ouvrez donc un projet C# Winforms et appelez-le HoverNotWorking. Ajoutez une nouvelle page HTML appelée HTMLPage1.html et collez-y le HTML suivant
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<style>
a#clickMe:hover {
background-color: #1A365B;
color: white;
}
a#clickMe {
background-color: #E0F1EA;
color: #000000;
}
</style>
</head>
<body>
<a id="clickMe">Click Me2</a>
</body>
</html>
N'hésitez pas à vérifier qu'il fonctionne dans un navigateur ordinaire, c'est le cas pour moi.
Allez dans le Form1 et ajoutez un contrôle WebBrowser.
Une tentative de solution consistait à configurer l'émulation de navigateur de WebBrowser (je ne savais pas que c'était possible, limité aux versions d'IE, j'en ai peur). J'ai donc placé ce code dans Main()
donc cela ressemble à ceci (résolvez les utilisations)
[STAThread]
static void Main()
{
// Make WebBrowser control emulate IE11
// https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#BROWSER_EMULATION
RegistryKey keyIeFeatureControl = Registry.LocalMachine.OpenSubKey(
@"Software\Microsoft\Internet Explorer\Main\FeatureControl");
RegistryKey keyIeFeatureBrowserEmulation = keyIeFeatureControl.OpenSubKey(
"FEATURE_BROWSER_EMULATION", true);
keyIeFeatureBrowserEmulation.SetValue(System.Reflection.Assembly.
GetExecutingAssembly().GetName().Name, 69632); // 69632 = &h11000
keyIeFeatureBrowserEmulation.Close();
keyIeFeatureControl.Close();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Et dans le fichier Form1.cs nous avons besoin d'un petit code pour localiser le HTMLPage1.html dans le dossier supérieur des solutions. Sinon, le code est tout à fait ordinaire.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Assembly myExe = System.Reflection.Assembly.GetExecutingAssembly();
string filePath = Path.GetDirectoryName(new Uri(myExe.CodeBase).LocalPath);
string myFile = System.IO.Path.Combine(filePath, @"..\..\HTMLPage1.html");
if (File.Exists(myFile))
{
this.webBrowser1.Navigate(myFile);
}
}
}
Mais le CSS de survol refuse de fonctionner. Je suis sûr que je pourrais créer un gestionnaire d'événements pour capturer le survol de la souris, etc. mais ce n'est pas le problème. Cela devrait fonctionner. J'ai configuré le contrôle du navigateur pour utiliser IE11, une version très moderne. Cela devrait fonctionner.
Qu'est-ce que je rate ?