Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
我正在尝试在我的 WPF 应用程序中创建一个简单的地图窗口。该应用程序运行没有任何错误,但地图不显示。我不确定如何调试该问题。 我的 WPF xaml: 我正在尝试在我的 WPF 应用程序中创建一个简单的地图窗口。该应用程序运行没有任何错误,但地图不显示。我不确定如何调试该问题。 我的 WPF xaml: <Window x:Class="StructuralCalculations.WindTool.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:local="clr-namespace:StructuralCalculations.WindTool" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="clr_namespace:StructuralCalculations.MainVM" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" Title="MainWindow" Width="800" Height="450" mc:Ignorable="d"> <Window.DataContext> <local:MainVM /> </Window.DataContext> <Grid> <Grid.RowDefinitions> <RowDefinition Height="10" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="10" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="10" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="150" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="10" /> </Grid.ColumnDefinitions> <wv2:WebView2 x:Name="MapBrowser" Grid.Row="1" Grid.Column="1" Width="500" Height="300" /> <StackPanel Grid.Row="1" Grid.Column="2" Margin="0,0,0,0" Orientation="Vertical"> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Project:" /> <TextBox Text="{Binding ProjectName}" /> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Job Number:" /> <TextBox Text="{Binding JobNumber}" /> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Address:" /> <TextBox x:Name="AddressTextBox" Text="{Binding Address}" /> <!--<Button Margin="30,5,30,5" Click="CenterMapButton_Click" Content="Center Map" />--> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Nearest City:" /> <TextBlock x:Name="CityNameTextBlock" Margin="0,0,0,0" VerticalAlignment="Center" Text="{Binding Location, Mode=TwoWay}" /> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Wind Region:" /> <TextBlock Margin="0,0,0,0" VerticalAlignment="Center" Text="{Binding WindRegion}" /> <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="Elevation:" /> <TextBlock x:Name="ElevationTextBlock" Margin="0,0,0,0" VerticalAlignment="Center" Text="{Binding Elevation, Mode=TwoWay}" /> </StackPanel> <Button Grid.Row="2" Grid.Column="4" Width="100" Height="50" Command="{Binding GenerateReportCommand}" Content="Report" /> </Grid> </Window> 我的xaml.cs: using Microsoft.Web.WebView2.Core; using System.IO; using System.Windows; namespace StructuralCalculations.WindTool { //[ComVisible(true)] // Make the class visible to COM for scripting public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitializeWebView(); } private async void InitializeWebView() { // Ensure WebView2 environment is initialized await MapBrowser.EnsureCoreWebView2Async(); // Enable JavaScript explicitly MapBrowser.CoreWebView2.Settings.IsScriptEnabled = true; // Attach event handlers after WebView2 is initialized MapBrowser.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived; MapBrowser.CoreWebView2.OpenDevToolsWindow(); // Open DevTools // Add a global error handler for JavaScript errors await MapBrowser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(@" window.onerror = (message, source, lineno, colno, error) => { console.error(`${message} at ${source}:${lineno}:${colno}`); }; "); // Get the path of the HTML file string htmlFilePath = Path.Combine(Environment.CurrentDirectory, "Shared", "map.html"); // Check if the file exists if (File.Exists(htmlFilePath)) { // Load the HTML file into WebView2 MapBrowser.CoreWebView2.Navigate(htmlFilePath); } else { MessageBox.Show("HTML file not found: " + htmlFilePath); } } void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e) { MessageBox.Show(e.WebMessageAsJson); } } } 我的 html 隐藏了我的 API 密钥: <!doctype html> <!-- @license Copyright 2019 Google LLC. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 --> <html> <head> <title>Add Map</title> </head> <body> <h3>My Google Maps Demo</h3> <!--The div element for the map --> <div id="map"></div> <!-- prettier-ignore --> <script> (g => { var h, a, k, p = "The Google Maps JavaScript API", c = "google", l = "importLibrary", q = "__ib__", m = document, b = window; b = b[c] || (b[c] = {}); var d = b.maps || (b.maps = {}), r = new Set, e = new URLSearchParams, u = () => h || (h = new Promise(async (f, n) => { await (a = m.createElement("script")); e.set("libraries", [...r] + ""); for (k in g) e.set(k.replace(/[A-Z]/g, t => "_" + t[0].toLowerCase()), g[k]); e.set("callback", c + ".maps." + q); a.src = `https://maps.${c}apis.com/maps/api/js?` + e; d[q] = f; a.onerror = () => h = n(Error(p + " could not load.")); a.nonce = m.querySelector("script[nonce]")?.nonce || ""; m.head.append(a) })); d[l] ? console.warn(p + " only loads once. Ignoring:", g) : d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)) }) ({ key: "myHiddenApiKey", v: "weekly" });</script> </body> </html> 这是我运行应用程序时得到的结果: 开发工具没有给出任何错误。 我只是看了他们的例子,看来你缩小的js代码只是为了导入库。添加脚本以在其之后实际渲染地图: <script> let map; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap(); </script>
ObservableValidator Int 验证不起作用
我使用 ObservableValidator 来验证 int 值, 我已经在我的视图模型中实现了 ObservableValidator, [可观察属性] [通知数据错误信息] [必填(ErrorMessage = "数字...
应用程序启动时关闭 LoginWindow 后 HomeWindow 无法打开
我有一个用 C# + WPF 制作的应用程序,其中包含两个窗口: 主页窗口 登录窗口 在应用程序启动之前,我调用一个加载 LoginWindow 的对话框,也就是说,如果 UserId
我在我的场景中使用drawingContext.DrawGlyphRun,因为我需要在屏幕上许多不同位置渲染大量文本时获得最佳性能。 不过,我来了
如何在WPF中构建垂直选项卡集?这些选项卡将从上到下堆叠起来,就像 Visual Studio 中显示的项目的“属性”一样。
XAML 绑定到 ViewModel 上的 CollectionViewSource 属性
我有一个简单的 ViewModel,例如: 公共类MainViewModel { ObservableCollection _projects; 公共 MainViewModel() { // 在这里填写数据库中的_projects...
我正在编写一个接收参数的 RelayCommand,但在调用实现该命令的方法时遇到问题。 我有以下 RelayCommand 类: 使用 System.Windows.Input;
为什么 WPF UserControl 的宿主窗口不被视为其逻辑父窗口?
我自己遇到这个问题后,正在阅读 Rohit Vats 对这篇文章的回答,并且想知道为什么 UserControl 的“父”窗口不被视为其逻辑父窗口。他...
DataGrid RowDetails 中的按钮需要两次点击,解决方法会中断双击
我有一个 DataGrid,其中有一个在 RowDetailsTemplate 中定义的按钮。问题是,当点击按钮时,第一次点击被DataGrid消耗来选择行,所以你需要点击...
使用 WindowStyle=None 正确最大化 WPF 窗口
使用 WindowStyle=None 选项时,WPF 窗口存在两个问题。 窗口最大化时会覆盖任务栏。 一旦最大化,窗口就无法向下拖动以取消最大化。 嗬...
如何使用ControlTemplate设置ListViewItem的样式?
我是 WPF 新手,绑定和样式的整个世界非常令人困惑。 我已经为 ListViewItem 创建了默认 ControlTemplate 的副本: 我是 WPF 新手,绑定和样式的整个世界非常令人困惑。 我已经为 ListViewItem 创建了默认 ControlTemplate 的副本: <Window.Resources> <ControlTemplate x:Key="ListViewItemControlTemplate1" TargetType="{x:Type ListViewItem}"> ... </ControlTemplate> </Window.Resources> 然后我的 ListView 中有列,例如: <ListView x:Name="lstFiles"> <ListView.View> <GridView> <GridViewColumn x:Name="clmName" Header="Name" DisplayMemberBinding="{Binding Name}" /> </GridView> </ListView.View> </ListView> 如果我在设计器中添加新项目,我可以轻松应用该 ControlTemplate: <ListViewItem Content="ListViewItem1" Template="{DynamicResource ListViewItemControlTemplate1}"/> 但是,当使用 lstFiles.ItemsSource 将项目绑定到 ListView 时,如何使用该模板? 我认为您想覆盖列表视图项的样式。来自:如何覆盖ListViewItem样式? <ListView.ItemContainerStyle> <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignListBoxItem}"> <Style.Resources> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ListBox.xaml" /> </Style.Resources> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" /> </Style>
如何在WPF(XAML)中与数据内容和滚动条在同一行添加重复按钮
我想从我的 Web 应用程序到我的 WPF 桌面应用程序重新创建此设计。 在这个设计中,我在侧面有这些 << and >> 重复按钮。 这是我的 WPF 中的图像
XamlType.GetAliasedProperty 有什么意义
我尝试寻找有关此方法的信息,但我无法理解它的含义和实用性。 MSDN 对此是这么说的:https://msdn.microsoft.com/en-us//library/vs...
我在流程文档中添加了一些图像,但所有图片都是按从下到上的顺序列出的。 我想从左到右按顺序排列图片的位置,将内容分解为...
我在流程文档中添加了一些图像,但所有图片都是按从下到上的顺序列出的。 我想从左到右按顺序放置图片,将内容分解为...
在我的 WPF 应用程序中,我必须设置一个系统托盘图标。这是一个每天都会使用的商业应用程序。 在win 7(也许是vista,我不知道)中,有些图标可以隐藏,仅在
FlowDocument 页面宽度未填充主机 TabControl 内容区域
我在尝试在 TabControl 的内容区域中托管 FlowDocument 内容时遇到布局问题。 我希望 FlowDocumentScrollViewer 渲染以适合托管 TabControl 的实际宽度,但是
我正在尝试创建一个可以向其传递“Person”对象的自定义控件。如何将 person 对象传递给自定义控件,例如将 PersonDetails="{Binding Path=Person}" 传递给 CusomContr...
为什么 DataTrigger 使用不正确的 DataContext?
我的项目如下所示: 任务类.cs: 命名空间 Library.TaskClassDirectory; 公共密封类 TaskClass :INotifyPropertyChanged { 公共任务类( 时间跨度计划人工成本, ...
电影.cs 公共类电影:INotifyPropertyChanged { 公共事件 PropertyChangedEventHandler PropertyChanged; 私有无效NotifyPropertyChanged(字符串属性) { 如果(