You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS扩展调试器可视化工具:WebView2调用方法及交互行为报错求助

解决VS扩展调试器可视化工具中MVVM模式下WebView2调用问题

问题根源分析

你遇到的Cannot set unknown member '{http://schemas.microsoft.com/xaml/behavior}Interaction.Bevahiors'错误,主要有两个原因:

  1. XAML中拼写错误:Bevahiors应为Behaviors
  2. VS扩展性项目的XAML解析环境对旧版System.Windows.Interactivity行为支持有限,即使修正拼写也可能无法正常工作

以下是两种可靠的替代方案:


方案一:自定义附加属性(推荐)

通过附加属性实现ViewModel与WebView2的绑定,完全符合MVVM模式,且适配VS扩展环境:

1. 创建WebView2附加属性辅助类

using Microsoft.Web.WebView2.Wpf;
using System.Windows;
using System.ComponentModel;

public static class WebView2Helper
{
    // 定义附加属性:绑定ViewModel中的HTML内容
    public static readonly DependencyProperty HtmlContentProperty =
        DependencyProperty.RegisterAttached(
            "HtmlContent",
            typeof(string),
            typeof(WebView2Helper),
            new PropertyMetadata(null, OnHtmlContentChanged));

    public static string GetHtmlContent(DependencyObject obj)
    {
        return (string)obj.GetValue(HtmlContentProperty);
    }

    public static void SetHtmlContent(DependencyObject obj, string value)
    {
        obj.SetValue(HtmlContentProperty, value);
    }

    // 属性变化时触发WebView2加载内容
    private static async void OnHtmlContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var webView = d as WebView2;
        if (webView == null || string.IsNullOrEmpty(e.NewValue?.ToString()))
            return;

        // 确保WebView2核心已初始化(VS扩展环境必须)
        if (webView.CoreWebView2 == null)
        {
            await webView.EnsureCoreWebView2Async();
        }

        await webView.CoreWebView2.NavigateToString(e.NewValue.ToString());
    }
}

2. XAML中绑定附加属性

<UserControl x:Class="YourExtensionNamespace.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:wv="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
             xmlns:local="clr-namespace:YourExtensionNamespace">

    <!-- 通过附加属性绑定ViewModel的HtmlContent -->
    <wv:WebView2 local:WebView2Helper.HtmlContent="{Binding HtmlContent}" />
</UserControl>

3. ViewModel中更新内容

public class MyViewModel : INotifyPropertyChanged
{
    private string _htmlContent;
    public string HtmlContent
    {
        get => _htmlContent;
        set
        {
            _htmlContent = value;
            OnPropertyChanged();
        }
    }

    // 示例:触发WebView2加载自定义HTML
    public void LoadCustomHtml()
    {
        HtmlContent = "<html><body><h1>调试器可视化内容</h1><p>通过MVVM绑定更新</p></body></html>";
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

方案二:修复行为绑定(备选)

如果坚持使用行为模式,需适配VS扩展环境:

  1. 安装新版行为包:在项目中安装Microsoft.Xaml.Behaviors.Wpf NuGet包(替代旧版System.Windows.Interactivity)
  2. 修正XAML命名空间与拼写:
<UserControl x:Class="YourExtensionNamespace.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:wv="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
             xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
             xmlns:local="clr-namespace:YourExtensionNamespace">

    <wv:WebView2 Source="https://www.google.ru">
        <i:Interaction.Behaviors>
            <!-- 修正拼写错误:Bevahiors → Behaviors -->
            <local:WebView2Custombehavior MethodName="ExecuteScriptAsync" 
                                          ExecuteMethod="{Binding ExecuteMethod}" 
                                          MethodParameter="{Binding MethodParameter}"/>
        </i:Interaction.Behaviors>
    </wv:WebView2>
</UserControl>

内容的提问来源于stack exchange,提问作者jin15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:48:19