Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
我想在每行中显示三列,并包含一些图像和文本。但无论我尝试什么,我都无法让列表框水平显示项目。只有列表框内的堆栈面板我...
在我的 WPF 表单中,我有一个文本框。 当计时器到时,需要获取文本框的内容。 计时器在与 UI 不同的线程中工作。 这个问题有点两层......
我正在开发 WPF 应用程序,并希望从 ClickOnce 迁移到 MSIX 侧载,以便在公司内的文件共享上发布我的应用程序。我遇到的一个问题是更新
示例我得到了这一行: 注意参数如何无序 示例我得到了这一行: 注意参数如何无序 <Button HorizontalAlignment="Center" Margin="200,150,0,0" Width="189" Content="Boo" Style="{DynamicResource btnGrayDownWIthcon}" IsDefault="True" IsCancel="False" Background="{DynamicResource ContractApprovedGreen}" Height="53" VerticalAlignment="Center" Name ="btnPoo" /> 一片混乱 我希望是这样: <Button Name ="btnPoo" Content="Boo" Background="{DynamicResource ContractApprovedGreen}" Style="{DynamicResource btnGrayDownWIthcon}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="200,150,0,0" Width="189" Height="53" IsDefault="True" IsCancel="False" /> 是否有任何自动工具可以按优先级和组对xaml参数重新排序? 是的,有一个名为 XAML Markup Styler 的 Visual Studio 扩展,您可以从 https://github.com/Xavalon/XamlStyler 免费下载和使用它。我和我的团队已经使用它几个月了,效果很好。它也可以对组/优先级进行重新排序。 :)
我想将 wpf 中的光标更改为自定义 .cur 文件? [重复]
我想将鼠标指针更改为应用程序中的自定义光标。 因此,当我的应用程序启动时,我想要自定义光标,当它停止时,我希望它消失。 如何在 C# 中执行此操作...
为什么 Visual Studio 不自动生成 Community.Toolkit.MVVM 附加代码?
源生成器正在创建代码,仅当我构建解决方案时。 问题 我是否搞乱了 Visual Studio 设置? 我该如何解决这个问题? 我是否错过了实施该工具包的某些内容? 设置...
我有一个 .NET 8 wpf 应用程序,它使用 Microsoft Community Toolkit 进行 MVVM 和 Microsoft 扩展依赖项注入以及 EF-Core 框架。 除了视图和视图模型我...
如何使用EntityFrameworkCore的实体配置属性绑定?
当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...
如何配置GridViewColumn到List的属性绑定<EntityFrameworkCore's Entity>?
当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...
创建一个从 C# 中的 WPF 控件派生的自定义 <Page> 类?
我之前一直在我的WPF应用程序中使用System.Windows.Controls.Page类。 现在需要创建我自己的类“CustomPage”,派生自“System.Windows.Controls.Page&...
我正在制作一个 WPF 应用程序,将桌面屏幕投影到无线显示器。但此功能仅在 UWP 中可用,请查看微软官方示例:https://github.com/microsoft/Windows-
我在 App.xaml 中定义了以下样式 <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> ...</desc> <question vote="13"> <p>我在 App.xaml 中定义了以下样式</p> <pre><code><Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" > <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" /> <Setter Property="MinHeight" Value="50" /> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </code></pre> <p>在整个解决方案中,我们在每个需要简短文本的文本框上使用它。</p> <pre><code><TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" /> </code></pre> <p>一切都很好,但随后客户抱怨某些字段被合并在分辨率较低的旧显示器上,因此我在较高的视觉树节点之一上放置了<pre><code>ScrollViewer</code></pre>以防止合并。</p> <pre><code><ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> ... </ScrollViewer> </code></pre> <p>奇怪的是,具有上述样式的 <pre><code>TextBox</code></pre> 开始向右扩展,而不是环绕文本。</p> <p>有没有办法在不删除<pre><code>ScrollViewer</code></pre>的情况下防止这种情况? </p> </question> <answer tick="false" vote="11"> <p>如果您不想对宽度进行硬编码,那么您可以使用元素绑定父项的宽度。</p> <p>这里我将 TextBox MaxWidth 与 ScrollViewer 实际宽度绑定。您还必须确保 ColumnDefinition 宽度应设置为“*”而不是“Auto”。如果将其设置为“自动”,它将忽略 ScrollViewer 宽度并继续扩展 ScrollViewer 和 TextBox 的宽度。 <em><strong>我认为你属于这种情况</strong></em>...</p> <pre><code><Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv"> <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}"></TextBox> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="true" vote="9"> <p>您必须为<pre><code>MaxWidth</code></pre>定义一个<pre><code>TextBox</code></pre>,否则没有限制,因为<pre><code>ScrollViewer</code></pre>。</p> </answer> <answer tick="false" vote="6"> <p>@bathineni 提供的解决方案帮助我解决了我的问题。这对我有用:</p> <pre><code><Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="50"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/> <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv"> <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="false" vote="1"> <p>第一个解决方案是使用数据绑定在 XAML 中实现的。我建议你不要单独绑定控件。 XAML 解决方案是通过将具有所需 ActualWidth 和 ActualHeight 属性的控件绑定到文本框 MaxHeight 和 MaxWidth 属性来实现的。</p> <pre><code><TextBlock x:Name="PasswordText" Margin="0,0,0,20" FontFamily="Bahnschrift SemiBold Condensed" Text="PASSWORD" FontSize="20"> <TextBox x:Name="PasswordTextBox" MaxWidth="{Binding ElementName=PasswordText, Path=ActualWidth}" MaxHeight="{Binding ElementName=PasswordText, Path=ActualHeight}"> </code></pre> <p>下一个解决方案是通过在 XAML 中生成 Loaded 事件,在 C# 代码中创建它,然后在 Loaded 事件中将文本框的 MaxWidth 和 MaxHeight 属性设置为文本框 ActualWidth 和 ActualHeight 属性来实现。</p> <pre><code>// It doesn't have a problem like in XAML if you pass the textbox its own // ActualWidth and ActualHeight to the MaxWidth and MaxHeight proprieties. private void Log_In_Page_Loaded(object sender, RoutedEventArgs e) { UsernameTextBox.MaxHeight = UsernameTextBox.ActualHeight; UsernameTextBox.MaxWidth = UsernameTextBox.ActualWidth; } </code></pre> <p>选择更适合你设计的一个,但我认为,在我看来,这是解决这个问题最有效、最简单、最稳定、最有效的方法。</p> </answer> <answer tick="false" vote="0"> <p>对我有用。如果你想让滚动条出现在文本框中,你可以添加</p> <pre><code>HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" </code></pre> <p>到文本框 </p> </answer> <answer tick="false" vote="0"> <p>您必须设置 <pre><code>MaxWidth</code></pre><pre> 的 </pre><code>Container Control</code></p> <pre><code><Grid x:Name="RootGrid" Margin="6,6,8,8" Width="500" MaxWidth="500"> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <GroupBox Name="contentGroup" Header="Content" Grid.Row="0"> <TextBox Name="content"/> </GroupBox> </Grid> </ScrollViewer> </code></pre> <p></p> </answer> <answer tick="false" vote="0"> <p>当我需要我的<pre><code>TextBox</code></pre>在调整大小时与其自动调整大小的<pre><code>Grid</code></pre>列一起拉伸时,我遇到了这个问题,这意味着<pre><code>MaxWidth</code></pre>不起作用,但仍然需要防止<pre><code>TextBox</code></pre>拉伸及其内容。</p> <p>我最终所做的是将这个事件处理程序链接到<pre><code>SizeChanged</code></pre>:</p> <pre><code>private void TextBox_SizeChanged(object sender, SizeChangedEventArgs e) { TextBox textBox = (TextBox)sender; if (textBox.CanUndo && e.NewSize.Width > e.PreviousSize.Width) { textBox.Width = e.PreviousSize.Width; } } </code></pre> <p>将文本写入文本框是用户可以撤消的操作,而其他可能导致调整大小的操作(元素的初始绘制、父容器的拉伸等)则无法从文本框中撤消。因此,通过检查 <pre><code>CanUndo</code></pre>,我们可以确定 <pre><code>SizeChanged</code></pre> 是否是由写入文本或其他内容触发的。</p> <p><pre><code>e.NewSize.Width > e.PreviousSize.Width</code></pre> 检查是必要的,因为没有它,<pre><code>SizeChanged</code></pre> 事件将从自身内部无限地调用,因为要恢复拉伸,我们需要 <em>将大小</em> 更改回原始值,这本身就会触发事件。</p> <p>这有点棘手,但我还没有遇到任何问题。</p> </answer> <answer tick="false" vote="0"> <p>我不知道为什么,但我无法让 ScrollViewer 解决方案工作。我需要一个具有固定初始宽度的 TextBox 来实现数字向上/向下控件 - 在此控件中,TextBox 独立于输入而缩小和增长,如果 UI 在您键入时发生变化,这看起来非常烦人。</p> <p>所以,我发现以下使用 2 个文本框的解决方案适合我。第一个文本框是为用户键入输入而显示的文本框,第二个文本框通过依赖属性 (DisplayLength) 和下面进一步显示的转换器进行初始化。</p> <p>将第一个文本框的 MaxWidth 属性绑定到第二个文本框的 Width 属性可以固定大小,以便用户可以键入他们想要的内容,但即使有更多可用的 UI 空间,文本框的显示宽度也不会改变。</p> <pre><code><TextBox x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxWidth="{Binding ElementName=TBMeasure, Path=ActualWidth}" /> <!-- Hidden measuring textbox ensures reservation of enough UI space according to DisplayLength dependency property --> <TextBox x:Name="TBMeasure" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayLength, Converter={StaticResource ByteToPlaceHolderStringConverter}}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="Hidden"/> // Converter [ValueConversion(typeof(byte), typeof(string))] public sealed class ByteToPlaceHolderStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if ((value is byte) == false) return Binding.DoNothing; byte byteVal = (byte)value; string retString = string.Empty; for (int i = 0; i < byteVal; i++) retString = retString + "X"; return retString; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Binding.DoNothing; } } </code></pre> </answer> </body></html>
我正在尝试使用 WebBrowser 在 WPF 应用程序中读取 HTML 文件,并且我想在 WebBrowser 和我从 HTML 文件导航的文本之间添加水印。 我尝试在 xaml.cs 文件中使用 CSS,但我...
使用CommunityToolkit.Mvvm生成“必需”属性
我在我的 WPF 项目中使用 CommunityToolkit.Mvvm。 像往常一样,我仅声明我的私有支持字段,并在其上添加 [ObservableProperty] 属性。我想要一些生成的
每当获取新图像数据时,我都会尝试更新 WPF 中的图像控件。我正在处理 1500x1500 16 位 RAW 图像(每个大约 5MB),我看到平均更新时间约为 22 毫秒,w...
我正在尝试在我的 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 中显示的项目的“属性”一样。