3
votes

WPF WebView ne s'affiche pas

J'apprends le contrôle WPF WebView, j'ai le fichier MainWindow.xaml ci-dessous:

<WPF:WebView x:Name="WebView1" Visibility="Visible" Grid.Column="1" Margin="50,50,50,50" Source="http://www.google.com" IsIndexedDBEnabled="True"
            IsJavaScriptEnabled="True"
            IsPrivateNetworkClientServerCapabilityEnabled="True"
            IsScriptNotifyAllowed="True" >
</WPF:WebView>

et le MainWindow.xaml.cs correspondant ci-dessous file:

using Microsoft.Toolkit.Wpf.UI.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MyWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Loaded");
        }
        private void BTN1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Loaded");
            ((ISupportInitialize)WebView1).BeginInit();
            ((ISupportInitialize)WebView1).EndInit();
            WebView1.Navigate(new Uri("https://localhost:3000"));
            Console.ReadLine();
        }
    }
}

Mais je ne reçois aucune fenêtre contextuelle attendue. Si je supprime

webView1.Navigate (nouvel Uri (" https://www.google.com "));

Je peux obtenir une fenêtre contextuelle vide. Quel est le problème avec mon code et comment le résoudre? Window_Loaded J'ai ajouté le gestionnaire d'événements Window_Loaded et j'y ai déplacé les deux ci-dessous, maintenant je peux voir une fenêtre contextuelle vide mais sans aucun contenu ni boîte de message.

<Window x:Class="MyWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyWPF"
        xmlns:WPF="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls.WebView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" AllowsTransparency="False" >
    <Grid x:Name="Grid1"  >
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="71*"/>
        </Grid.ColumnDefinitions>
        <WPF:WebView x:Name="WebView1" Visibility="Visible" Grid.Column="1" Margin="50,50,50,50" Source="http://www.google.com" >
        </WPF:WebView>
        <Button Name="BTN1" Click="BTN1_Click" Margin="285,380,285,10" Grid.Column="1" >Click Me</Button>
        <TextBlock Margin="0,0,747,390" Grid.ColumnSpan="2">
            <Hyperlink
                NavigateUri="http://www.google.com">
                Google
            </Hyperlink>
        </TextBlock>
    </Grid>
</Window>

L'ensemble du code-behind mis à jour:

namespace MyWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Loaded");

            //Uri uri = ;
            WebView1.Navigate(new Uri("https://www.google.com"));
        }
        private void BTN1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Loaded");
            WebView1.Navigate(new Uri("https://www.google.com"));
        }
    }
}  

UPDATE2

J'ai ajouté un HyperLink et un Button dans le fichier xaml, ci-dessous est le fichier xaml mis à jour:

<Window x:Class="MyWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyWPF"
        xmlns:WPF="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls.WebView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" AllowsTransparency="False" >
    <Grid x:Name="Grid1" Visibility="Visible" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="71*"/>
        </Grid.ColumnDefinitions>
        <WPF:WebView x:Name="WebView1" Visibility="Visible" Grid.Column="1" Margin="50,50,50,50">
        </WPF:WebView>
        <Button Name="BTN1" Click="BTN1_Click" Margin="285,380,285,10" Grid.Column="1" >Click Me</Button>
        <TextBlock Margin="0,0,747,390" Grid.ColumnSpan="2">
            <Hyperlink
                NavigateUri="http://www.google.com">
                Google
            </Hyperlink>
        </TextBlock>
    </Grid>
</Window>

et en ajoutant Button click gestionnaire d'événements dans le code-behind avec l'initialisation de la vue Web à l'intérieur:

namespace MyWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Loaded");
            Uri uri = new Uri("https://www.google.com");
            WebView1.Navigate(uri);
        }
    }
}

Rien ne se passe après avoir cliqué sur HyperLink. Je vois une boîte de message contextuelle après avoir cliqué sur le bouton, mais Google ne s'affiche toujours pas.

J'ai suivi le lien:

https: // docs .microsoft.com / fr-fr / windows / communitytoolkit / controls / wpf-winforms / webview # high-dpi

J'ai défini la propriété Source Source = "http://www.google.com" dans le fichier xaml, voir le code ci-dessous:

Uri uri = new Uri("https://www.google.com");
WebView1.Navigate(uri);


13 commentaires

Qu'est-ce qui ne va pas avec votre code? Je ne suis pas sûr de ce à quoi vous vous attendez lorsque vous supprimez cette ligne de code.


Aucune attente, mais je me demande pourquoi sans cette ligne, je peux voir une fenêtre contextuelle.


La WebView est-elle obligatoire? Avec WebBrowser cela fonctionne.


Oui, WebView est un must, j'ai trouvé que WebBrowser fonctionnait également.


Vous devez appeler webView1.Navigate (new Uri ("https://www.google.com")); lorsque Window est chargé, pas dans le constructeur.


@fhnaseer ne fonctionne toujours pas, consultez la mise à jour.


Avez-vous vérifié Problèmes connus de WebView contrôle ? Cela fonctionne-t-il si vous définissez un lien en XAML?


@Rekshino J'ai défini un lien mais ne fonctionne toujours pas, veuillez vérifier les nouvelles mises à jour.


En fait, je ne l'ai trouvé que nécessaire pour la deuxième WebView et je doute que cela aide, mais peut-être peut-être aussi vous aider: ((ISupportInitialize) webView) .BeginInit () et < code> ((ISupportInitialize) webView) .EndInit ()


Essayez également de définir des attributs supplémentaires, il peut s'agir simplement d'une autorisation ou d'un paramètre de navigateur / WebView . Voir exemple


@Rekshino Ne fonctionne toujours pas, veuillez consulter la mise à jour.


Voir aussi WPF C # WebView n'affiche aucun page sur win 10 Essayez d'exécuter votre application en tant qu'administrateur.


J'ai essayé la même chose mais obtenir une erreur ci-dessous sur le contrôle WPF dans les idées xaml ny? .. "La valeur spécifiée ne peut pas être attribuée à la collection. Le type suivant était attendu:" UIElement "


3 Réponses :


3
votes

J'avais le même problème lors de la mise à niveau de la première boîte à outils de prévisualisation, et tout cela était dû au fait que la fonction Naviguer provoquait le masquage de la fenêtre de démarrage.

Changement de:

WebView1.Source = new Uri("https://localhost:3000");

À:

WebView1.Navigate(new Uri("https://localhost:3000"));


2 commentaires

En fait, cela a aidé à voir la fenêtre de l'application, mais le ctrl WebView n'affiche toujours pas le site Web ...


J'ai également eu un problème avec WebView dans WPF, mais une fois que j'ai spécifié la hauteur et la largeur en XAML, il est apparu.



1
votes

J'avais aussi ce problème et même en utilisant le

 myWebBrowser.BringIntoView();

il n'affichait pas la page.

J'ai ajouté ce qui suit au code et maintenant il se charge bien .

myWebBrowser.Source = new Uri("https://www.google.com");

J'utilise ceci avec WPF et je l'affiche dans une fenêtre contextuelle, je ne sais pas si cela a quelque chose à voir avec le problème que j'avais ou non.


0 commentaires

1
votes

Avez-vous exécuté votre programme en tant qu'administrateur (avec des privilèges élevés), soit directement, soit via Visual Studio?

Selon cette discussion ceci n'est pas possible, Win32 WebView ne prend pas en charge l'exécution sous un jeton élevé.

Si vous vérifiez votre journal des événements Windows, vous devriez également trouver une erreur d'application comme celle mentionnée dans la discussion.


0 commentaires