Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
当我将 ScrollViewer 添加到网格时,行的高度被破坏,如图所示。我该如何修复它? 使用 ScrollViewer(不好): 没有 ScrollViewer(好): 当我添加网格高度时...
我们似乎在 WPF 中遇到了一些带有未处理异常的“有趣”行为。 简而言之,短时间内在调度程序线程上抛出两次相同的异常将绕过
我在网上搜索寻呼用户控制代码,但找不到满足以下条件的人: 注意:我在一个服务调用中获取了所有行并将集合存储在父视图模型中(
因此,我几乎遵循了我能找到的所有示例,了解如何将 WPF 控件上的拖/放效果设置为“无”以显示带有线条符号的圆圈,但无济于事。 这是我的代码...
如何在光标处于非活动状态的情况下在 WPF Visual Studio 2022 画布中绘制点
我一直在用C#使用WPF在Visual Studio 2022中做一个项目,基于Cobbs方法来测量脊柱侧弯程度。 基本上是为了让您了解我如何采用该方法来编码......
WPF DataGrid 需要 >1 秒才能加载“少量”数据 (40x40)
我正在努力为 WPF 中合理大小的 DataGrid 提供合理的加载时间。 我的例子非常简单,粘贴在下面。当按下按钮时,它只是加载 40x40 数字的网格,...
我想制作一个仅缩放其高度的Viewbox(或类似的东西),然后水平拉伸其内容。 如果我这样做: 福 我想制作一个 Viewbox (或类似的东西),仅缩放其高度,然后水平拉伸其内容。 如果我这样做: <Viewbox> <StackPanel> <Button>Foo</Button> <Button>Bar</Button> </StackPanel> </Viewbox> 然后我明白了: (来源:excastle.com) 它的作用就好像两个按钮都有 HorizontalAlignment="Center",然后缩放结果。但我不想要HorizontalAlignment="Center"; 我想要HorizontalAlignment="Stretch",就像这样: (来源:excastle.com) 所以,我希望它读取其内容所需的高度,仅根据高度计算缩放因子,然后允许缩放后的内容水平拉伸。 有什么方法可以使用 Viewbox 和/或某些第三方面板来完成此操作吗? WPF 中没有这样的控件,但您可以自己编写一个,不会太麻烦。 这是一个具有您的规格的自定义 ViewboxPanel: public class ViewboxPanel : Panel { private double scale; protected override Size MeasureOverride(Size availableSize) { double height = 0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); height += child.DesiredSize.Height; } scale = availableSize.Height / height; return availableSize; } protected override Size ArrangeOverride(Size finalSize) { Transform scaleTransform = new ScaleTransform(scale, scale); double height = 0; foreach (UIElement child in Children) { child.RenderTransform = scaleTransform; child.Arrange(new Rect(new Point(0, scale * height), new Size(finalSize.Width / scale, child.DesiredSize.Height))); height += child.DesiredSize.Height; } return finalSize; } } 你可以像这样使用它: <local:ViewboxPanel> <Button>Foo</Button> <Button>Bar</Button> </local:ViewboxPanel> 它肯定需要一些工作,但这可能会让你开始。 保持宽度正常工作: protected override Size MeasureOverride(Size availableSize) { double height = 0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); height += child.DesiredSize.Height; } scale = availableSize.Height / height; foreach (UIElement child in Children) { unlimitedSize.Width = availableSize.Width / scale; child.Measure(unlimitedSize); } return availableSize; } 我很确定答案是“不容易”。 这是一个似乎可行但有点笨拙的想法: 将 StackPanel 放入 UserControl(下例中的 UserControl1)。 将此 UserControl 的两个副本放入容器(下例中的网格)中。 a.将第一个副本顶部/左侧对齐,使其保持默认大小。该副本严格用于测量目的,应将其可见性设置为隐藏。 b.将第二个副本放入视图框内。该副本是用户实际看到的副本。 使用带有 MultiValueConverter 的 MultiBinding 来调整第二个 UserControl 的宽度,使其在 被 Viewbox 展开之前具有正确的宽高比。 这是标记: <Grid> <local:UserControl1 x:Name="RawControl" HorizontalAlignment="Left" VerticalAlignment="Top" Visibility="Hidden" /> <Viewbox> <local:UserControl1> <local:UserControl1.Width> <MultiBinding Converter="{StaticResource WidthAdjuster}"> <Binding ElementName="RawControl" Path="ActualHeight" /> <Binding RelativeSource="{RelativeSource AncestorType=Grid}" Path="ActualWidth" /> <Binding RelativeSource="{RelativeSource AncestorType=Grid}" Path="ActualHeight" /> </MultiBinding> </local:UserControl1.Width> </local:UserControl1> </Viewbox> </Grid> 这是多值转换器 public class WidthAdjuster : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { var rawHeight = (double)values[0]; var containerWidth = (double)values[1]; var containerHeight = (double)values[2]; var ratio = containerWidth / containerHeight; return rawHeight * ratio; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 525 x 350 容器的结果 我有一个几乎类似的问题。我的面板必须适合所有子面板,将它们排成一排并拉伸它们,均匀地填充面板。上面的算法使用渲染变换来缩放元素。问题是渲染变换会拉伸子项本身,但忽略边距。如果边距较高且比例系数低于 1,则元素会从面板中脱落。您必须根据该轴上的边距校正 RenderTransform 的比例,并使用相同的比例系数进行排列。我使用的MeasureOverride是 protected override Size MeasureOverride(Size availableSize) { double width = 0; double maxHeight = 0; double mY=0; double mX=0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); width += child.DesiredSize.Width; maxHeight = Math.Max(maxHeight, child.DesiredSize.Height); FrameworkElement cld = child as FrameworkElement; mY = cld.Margin.Top + cld.Margin.Bottom; mX = cld.Margin.Left + cld.Margin.Right; } double scaleX = availableSize.Width / width; double scaleY = availableSize.Height / maxHeight; //That is scale for arranging positionScaling = Math.Min(scaleX, scaleY); try { // Let FrameworkElement hight be Xn. mY = Element.Margin.Top + Element.Margin.bottom. // DesiredSize includes margin therefore: // (Yn + mY) * scaleY = availableSize.Height // But render transform doesn't scales margin. Actual render height with margin will be // Yn * RenderScaleY + mY = availableSize.Height; // We must find render transform scale coeff like this: double yn = availableSize.Height / scaleY - mY; scaleY = (availableSize.Height - mY) / yn; double xn = availableSize.Width / scaleX - mX; scaleX = (availableSize.Width - mX) / xn; scale = Math.Min(scaleX, scaleY); //scale to use in RenderTransform // In my project all children are similar in size and margin, algorithm BREAKS otherwise!!! } catch { scale = 1; } return availableSize; } 再一次:在我的项目中,所有子项的大小和边距都相似,否则算法会崩溃。 除了Rick Sladkey的回答之外,当所有元素的总高度变得太小并且水平方向发生尺寸过大,使得元素在右侧被切割时,这里有一个测量方法的小修复: protected override Size MeasureOverride(Size availableSize) { double height = 0; Size unlimitedSize = new Size(double.PositiveInfinity, double.PositiveInfinity); foreach (UIElement child in Children) { child.Measure(unlimitedSize); height += child.DesiredSize.Height; } scale = availableSize.Height / height; foreach (UIElement child in Children) { var childDesireWidth = child.DesiredSize.Width; if (childDesireWidth * scale > availableSize.Width) scale = availableSize.Width / childDesireWidth; } return availableSize; }
我有一个基于 WPF / .Net Framework 4.8 和 Prism for MVVM 的应用程序。我不明白如何使用 MVVM 对数据网格中的项目进行分组。我发现的所有指南都仅在没有 MVVM 的情况下实现了此功能。还有
我有一个一般性问题:我想使用wpf开发一个facebook应用程序(目标是在facebook上运行一个类似游戏的应用程序)。 wpf应用程序可以在智能手机上运行吗? 我想知道...
当我尝试计算 Visual Studio WPF 应用程序的代码指标时,我注意到它不起作用。它显示错误消息:跳过了一个或多个项目。代码指标仅可用...
我已经创建了从 xml 文件层次结构动态填充的树视图,但我遇到了问题。在树视图中,嵌套层次结构是递归重复的,并得到如下结果: 树视图的 XAML 标记: <
我正在使用 WPF Flowdocument 打印带有页眉和页脚的表格中的内容。 但是,当数据仅占据表中的几行时,页脚部分仍然反映在页面的最后...
我有一个画布,我将在上面添加一些矩形。我想知道我有多少个矩形的孩子。很像 array.length。 我已经尝试过这段代码,但没有运气 整数计数 = p...
我从头开始使用 C# 进行开发不到 3 个月,我目前得到的是一个使用 Visual Studio 2015 制作的控制台应用程序。该应用程序使用一个 Web 服务,XML 是
Textbox 有 Clear 和 GetSpellingErrors 方法等。 我可以有类似< TextBox Clear={binding...} />的东西吗? 我知道 Clear 不是“依赖”任何东西。 我是作者...
在实体框架中调用 SaveChanges() 时,WPF Datagrid 未更新
我有小型 WPF / .NET 应用程序,并通过 System.Data.Entity 连接到 SQLite 数据库。主窗口有一个按钮和一个文本框。 单击按钮时,必须添加一个带有 id 的新元素...
是否可以使用带有附加事件的 Microsoft.Xaml.Behaviors.EventTrigger 来调用命令?
我正在尝试使用附加事件来调用 ICommand。 我正在使用 Microsoft.Toolkit.Mvvm NuGet 包以及 Microsoft.Xaml.Behaviors.Wpf Nuget 包。 我已经成功开始...
我正在努力创建一个具有非常具体的 GUI 外观的应用程序。我的应用程序包含带有滚动条的 TreeView。不幸的是,滚动条非常基本,看起来就像典型的 Windows
我对于在 WPF 中创建 DependencyProperties 和扩展其他控件还很陌生。 我已经扩展了一个 ContentControl,我想将其用作 DialogHeader,我正在遵循我的做法...
我定义了一个名为 SizeSliderValue 的 suser 范围设置。 在cs代码的最上面; 使用系统; 使用系统.IO; 使用 System.Threading.Tasks; 使用系统.Windows; 使用 System.Windows.Controls;