wpf 相关问题

Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。

c# WPF 显示每行 3 列的列表框

我想在每行中显示三列,并包含一些图像和文本。但无论我尝试什么,我都无法让列表框水平显示项目。只有列表框内的堆栈面板我...

回答 1 投票 0

如何从WPF中的另一个线程读取textbox.Text值?

在我的 WPF 表单中,我有一个文本框。 当计时器到时,需要获取文本框的内容。 计时器在与 UI 不同的线程中工作。 这个问题有点两层......

回答 8 投票 0

修改我的 MSIX 应用安装程序文件以进行自定义更新设置

我正在开发 WPF 应用程序,并希望从 ClickOnce 迁移到 MSIX 侧载,以便在公司内的文件共享上发布我的应用程序。我遇到的一个问题是更新

回答 1 投票 0

重新排序 XAML 代码?

示例我得到了这一行: 注意参数如何无序 示例我得到了这一行: 注意参数如何无序 <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 免费下载和使用它。我和我的团队已经使用它几个月了,效果很好。它也可以对组/优先级进行重新排序。 :)

回答 1 投票 0

我想将 wpf 中的光标更改为自定义 .cur 文件? [重复]

我想将鼠标指针更改为应用程序中的自定义光标。 因此,当我的应用程序启动时,我想要自定义光标,当它停止时,我希望它消失。 如何在 C# 中执行此操作...

回答 2 投票 0

为什么 Visual Studio 不自动生成 Community.Toolkit.MVVM 附加代码?

源生成器正在创建代码,仅当我构建解决方案时。 问题 我是否搞乱了 Visual Studio 设置? 我该如何解决这个问题? 我是否错过了实施该工具包的某些内容? 设置...

回答 1 投票 0

如何判断之前的任务调用是否完成

我有一个 .NET 8 wpf 应用程序,它使用 Microsoft Community Toolkit 进行 MVVM 和 Microsoft 扩展依赖项注入以及 EF-Core 框架。 除了视图和视图模型我...

回答 1 投票 0

如何使用EntityFrameworkCore的实体配置属性绑定?

当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...

回答 1 投票 0

如何配置GridViewColumn到List的属性绑定<EntityFrameworkCore's Entity>?

当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...

回答 1 投票 0

创建一个从 C# 中的 WPF 控件派生的自定义 <Page> 类?

我之前一直在我的WPF应用程序中使用System.Windows.Controls.Page类。 现在需要创建我自己的类“CustomPage”,派生自“System.Windows.Controls.Page&...

回答 1 投票 0

是否可以在不显示的情况下启动UWP应用程序?

我正在制作一个 WPF 应用程序,将桌面屏幕投影到无线显示器。但此功能仅在 UWP 中可用,请查看微软官方示例:https://github.com/microsoft/Windows-

回答 1 投票 0

防止 TextBox 在 WPF 中水平扩展

我在 App.xaml 中定义了以下样式 <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> ...</desc> <question vote="13"> <p>我在 App.xaml 中定义了以下样式</p> <pre><code>&lt;Style x:Key=&#34;textBoxMultiline&#34; TargetType=&#34;{x:Type TextBox}&#34; &gt; &lt;Setter Property=&#34;VerticalScrollBarVisibility&#34; Value=&#34;Auto&#34; /&gt; &lt;Setter Property=&#34;HorizontalScrollBarVisibility&#34; Value=&#34;Hidden&#34; /&gt; &lt;Setter Property=&#34;MinHeight&#34; Value=&#34;50&#34; /&gt; &lt;Setter Property=&#34;TextWrapping&#34; Value=&#34;Wrap&#34; /&gt; &lt;/Style&gt; </code></pre> <p>在整个解决方案中,我们在每个需要简短文本的文本框上使用它。</p> <pre><code>&lt;TextBox x:Name=&#34;textBoxDescription&#34; Grid.Row=&#34;2&#34; Grid.Column=&#34;1&#34; Style=&#34;{DynamicResource textBoxMultiline}&#34; /&gt; </code></pre> <p>一切都很好,但随后客户抱怨某些字段被合并在分辨率较低的旧显示器上,因此我在较高的视觉树节点之一上放置了<pre><code>ScrollViewer</code></pre>以防止合并。</p> <pre><code>&lt;ScrollViewer Height=&#34;Auto&#34; VerticalScrollBarVisibility=&#34;Auto&#34; HorizontalScrollBarVisibility=&#34;Auto&#34;&gt; ... &lt;/ScrollViewer&gt; </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>&lt;Grid&gt; &lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition Width=&#34;*&#34;&gt;&lt;/ColumnDefinition&gt; &lt;ColumnDefinition Width=&#34;*&#34;&gt;&lt;/ColumnDefinition&gt; &lt;/Grid.ColumnDefinitions&gt; &lt;ScrollViewer HorizontalScrollBarVisibility=&#34;Auto&#34; Name=&#34;scv&#34;&gt; &lt;TextBox Height=&#34;30&#34; TextWrapping=&#34;Wrap&#34; MaxWidth=&#34;{Binding ElementName=scv, Path=ActualWidth}&#34;&gt;&lt;/TextBox&gt; &lt;/ScrollViewer&gt; &lt;/Grid&gt; </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>&lt;Grid &gt; &lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition Width=&#34;50&#34;/&gt; &lt;ColumnDefinition Width=&#34;*&#34;/&gt; &lt;/Grid.ColumnDefinitions&gt; &lt;Button Grid.Column=&#34;0&#34; Width=&#34;30&#34; Height=&#34;23&#34; Margin=&#34;10,5&#34; Content=&#34;...&#34;/&gt; &lt;ScrollViewer Grid.Column=&#34;1&#34; HorizontalScrollBarVisibility=&#34;Disabled&#34; verticalScrollBarVisibility=&#34;Disabled&#34; Name=&#34;scv&#34;&gt; &lt;TextBox Height=&#34;25&#34; Text=&#34;Insert here long text&#34; MaxWidth=&#34;{Binding ElementName=scv, Path=ActualWidth}&#34; HorizontalAlignment=&#34;Stretch&#34; /&gt; &lt;/ScrollViewer&gt; &lt;/Grid&gt; </code></pre> </answer> <answer tick="false" vote="1"> <p>第一个解决方案是使用数据绑定在 XAML 中实现的。我建议你不要单独绑定控件。 XAML 解决方案是通过将具有所需 ActualWidth 和 ActualHeight 属性的控件绑定到文本框 MaxHeight 和 MaxWidth 属性来实现的。</p> <pre><code>&lt;TextBlock x:Name=&#34;PasswordText&#34; Margin=&#34;0,0,0,20&#34; FontFamily=&#34;Bahnschrift SemiBold Condensed&#34; Text=&#34;PASSWORD&#34; FontSize=&#34;20&#34;&gt; &lt;TextBox x:Name=&#34;PasswordTextBox&#34; MaxWidth=&#34;{Binding ElementName=PasswordText, Path=ActualWidth}&#34; MaxHeight=&#34;{Binding ElementName=PasswordText, Path=ActualHeight}&#34;&gt; </code></pre> <p>下一个解决方案是通过在 XAML 中生成 Loaded 事件,在 C# 代码中创建它,然后在 Loaded 事件中将文本框的 MaxWidth 和 MaxHeight 属性设置为文本框 ActualWidth 和 ActualHeight 属性来实现。</p> <pre><code>// It doesn&#39;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=&#34;Auto&#34; VerticalScrollBarVisibility=&#34;Auto&#34; </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>&lt;Grid x:Name=&#34;RootGrid&#34; Margin=&#34;6,6,8,8&#34; Width=&#34;500&#34; MaxWidth=&#34;500&#34;&gt; &lt;ScrollViewer ScrollViewer.HorizontalScrollBarVisibility=&#34;Disabled&#34; ScrollViewer.VerticalScrollBarVisibility=&#34;Auto&#34;&gt; &lt;Grid&gt; &lt;Grid.RowDefinitions&gt; &lt;RowDefinition Height=&#34;Auto&#34;/&gt; &lt;/Grid.RowDefinitions&gt; &lt;GroupBox Name=&#34;contentGroup&#34; Header=&#34;Content&#34; Grid.Row=&#34;0&#34;&gt; &lt;TextBox Name=&#34;content&#34;/&gt; &lt;/GroupBox&gt; &lt;/Grid&gt; &lt;/ScrollViewer&gt; </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 &amp;&amp; e.NewSize.Width &gt; 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 &gt; 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>&lt;TextBox x:Name=&#34;PART_TextBox&#34; Text=&#34;{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}&#34; Margin=&#34;0,0,1,0&#34; TextAlignment=&#34;Right&#34; AcceptsReturn=&#34;False&#34; SpellCheck.IsEnabled=&#34;False&#34; HorizontalContentAlignment=&#34;Stretch&#34; VerticalContentAlignment=&#34;Center&#34; HorizontalAlignment=&#34;Stretch&#34; VerticalAlignment=&#34;Stretch&#34; MaxWidth=&#34;{Binding ElementName=TBMeasure, Path=ActualWidth}&#34; /&gt; &lt;!-- Hidden measuring textbox ensures reservation of enough UI space according to DisplayLength dependency property --&gt; &lt;TextBox x:Name=&#34;TBMeasure&#34; Text=&#34;{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayLength, Converter={StaticResource ByteToPlaceHolderStringConverter}}&#34; Margin=&#34;0,0,1,0&#34; TextAlignment=&#34;Right&#34; AcceptsReturn=&#34;False&#34; SpellCheck.IsEnabled=&#34;False&#34; HorizontalContentAlignment=&#34;Right&#34; VerticalContentAlignment=&#34;Center&#34; HorizontalAlignment=&#34;Stretch&#34; VerticalAlignment=&#34;Stretch&#34; Visibility=&#34;Hidden&#34;/&gt; // 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 &lt; byteVal; i++) retString = retString + &#34;X&#34;; return retString; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Binding.DoNothing; } } </code></pre> </answer> </body></html>

回答 0 投票 0

需要在网络浏览器中添加水印

我正在尝试使用 WebBrowser 在 WPF 应用程序中读取 HTML 文件,并且我想在 WebBrowser 和我从 HTML 文件导航的文本之间添加水印。 我尝试在 xaml.cs 文件中使用 CSS,但我...

回答 1 投票 0

使用CommunityToolkit.Mvvm生成“必需”属性

我在我的 WPF 项目中使用 CommunityToolkit.Mvvm。 像往常一样,我仅声明我的私有支持字段,并在其上添加 [ObservableProperty] 属性。我想要一些生成的

回答 1 投票 0

WPF 图像控件大图像更新速度慢

每当获取新图像数据时,我都会尝试更新 WPF 中的图像控件。我正在处理 1500x1500 16 位 RAW 图像(每个大约 5MB),我看到平均更新时间约为 22 毫秒,w...

回答 1 投票 0

在 WPF 应用程序中获取地图窗口

我正在尝试在我的 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>

回答 1 投票 0

ObservableValidator Int 验证不起作用

我使用 ObservableValidator 来验证 int 值, 我已经在我的视图模型中实现了 ObservableValidator, [可观察属性] [通知数据错误信息] [必填(ErrorMessage = "数字...

回答 1 投票 0

应用程序启动时关闭 LoginWindow 后 HomeWindow 无法打开

我有一个用 C# + WPF 制作的应用程序,其中包含两个窗口: 主页窗口 登录窗口 在应用程序启动之前,我调用一个加载 LoginWindow 的对话框,也就是说,如果 UserId

回答 1 投票 0

处理 DrawGlyphRun WPF 中缺失的字符

我在我的场景中使用drawingContext.DrawGlyphRun,因为我需要在屏幕上许多不同位置渲染大量文本时获得最佳性能。 不过,我来了

回答 1 投票 0

如何在WPF中构建垂直选项卡集?

如何在WPF中构建垂直选项卡集?这些选项卡将从上到下堆叠起来,就像 Visual Studio 中显示的项目的“属性”一样。

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.