wpf 相关问题

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

C# WPF 添加滚动查看器到网格打破行高度

当我将 ScrollViewer 添加到网格时,行的高度被破坏,如图所示。我该如何修复它? 使用 ScrollViewer(不好): 没有 ScrollViewer(好): 当我添加网格高度时...

回答 1 投票 0

相同的异常抛出两次会导致 WPF 崩溃

我们似乎在 WPF 中遇到了一些带有未处理异常的“有趣”行为。 简而言之,短时间内在调度程序线程上抛出两次相同的异常将绕过

回答 2 投票 0

WPF 中分页用户控件的好例子

我在网上搜索寻呼用户控制代码,但找不到满足以下条件的人: 注意:我在一个服务调用中获取了所有行并将集合存储在父视图模型中(

回答 1 投票 0

WPF 拖放无效果未触发

因此,我几乎遵循了我能找到的所有示例,了解如何将 WPF 控件上的拖/放效果设置为“无”以显示带有线条符号的圆圈,但无济于事。 这是我的代码...

回答 2 投票 0

如何在光标处于非活动状态的情况下在 WPF Visual Studio 2022 画布中绘制点

我一直在用C#使用WPF在Visual Studio 2022中做一个项目,基于Cobbs方法来测量脊柱侧弯程度。 基本上是为了让您了解我如何采用该方法来编码......

回答 1 投票 0

WPF DataGrid 需要 >1 秒才能加载“少量”数据 (40x40)

我正在努力为 WPF 中合理大小的 DataGrid 提供合理的加载时间。 我的例子非常简单,粘贴在下面。当按下按钮时,它只是加载 40x40 数字的网格,...

回答 1 投票 0

使 Viewbox 垂直缩放但水平拉伸

我想制作一个仅缩放其高度的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; }

回答 5 投票 0

如何在 WPF 和 MVVM 中对数据网格项进行分组?

我有一个基于 WPF / .Net Framework 4.8 和 Prism for MVVM 的应用程序。我不明白如何使用 MVVM 对数据网格中的项目进行分组。我发现的所有指南都仅在没有 MVVM 的情况下实现了此功能。还有

回答 1 投票 0

在智能手机上运行 facebook 应用程序

我有一个一般性问题:我想使用wpf开发一个facebook应用程序(目标是在facebook上运行一个类似游戏的应用程序)。 wpf应用程序可以在智能手机上运行吗? 我想知道...

回答 2 投票 0

Visual Studio代码指标计算错误

当我尝试计算 Visual Studio WPF 应用程序的代码指标时,我注意到它不起作用。它显示错误消息:跳过了一个或多个项目。代码指标仅可用...

回答 1 投票 0

C# WPF 元素的递归重复嵌套层次结构

我已经创建了从 xml 文件层次结构动态填充的树视图,但我遇到了问题。在树视图中,嵌套层次结构是递归重复的,并得到如下结果: 树视图的 XAML 标记: <

回答 1 投票 0

动态可打印内容区域

我正在使用 WPF Flowdocument 打印带有页眉和页脚的表格中的内容。 但是,当数据仅占据表中的几行时,页脚部分仍然反映在页面的最后...

回答 1 投票 0

找出您有多少个特定类型的孩子?

我有一个画布,我将在上面添加一些矩形。我想知道我有多少个矩形的孩子。很像 array.length。 我已经尝试过这段代码,但没有运气 整数计数 = p...

回答 1 投票 0

将 C# 控制台应用程序与 GUI 集成

我从头开始使用 C# 进行开发不到 3 个月,我目前得到的是一个使用 Visual Studio 2015 制作的控制台应用程序。该应用程序使用一个 Web 服务,XML 是

回答 5 投票 0

在mvvm中绑定或执行control.method

Textbox 有 Clear 和 GetSpellingErrors 方法等。 我可以有类似< TextBox Clear={binding...} />的东西吗? 我知道 Clear 不是“依赖”任何东西。 我是作者...

回答 1 投票 0

在实体框架中调用 SaveChanges() 时,WPF Datagrid 未更新

我有小型 WPF / .NET 应用程序,并通过 System.Data.Entity 连接到 SQLite 数据库。主窗口有一个按钮和一个文本框。 单击按钮时,必须添加一个带有 id 的新元素...

回答 1 投票 0

是否可以使用带有附加事件的 Microsoft.Xaml.Behaviors.EventTrigger 来调用命令?

我正在尝试使用附加事件来调用 ICommand。 我正在使用 Microsoft.Toolkit.Mvvm NuGet 包以及 Microsoft.Xaml.Behaviors.Wpf Nuget 包。 我已经成功开始...

回答 2 投票 0

如何编辑拇指以在 WPF 中使用自定义图像 (.png)?

我正在努力创建一个具有非常具体的 GUI 外观的应用程序。我的应用程序包含带有滚动条的 TreeView。不幸的是,滚动条非常基本,看起来就像典型的 Windows

回答 1 投票 0

WPF DependencyProperty 定义和用法

我对于在 WPF 中创建 DependencyProperties 和扩展其他控件还很陌生。 我已经扩展了一个 ContentControl,我想将其用作 DialogHeader,我正在遵循我的做法...

回答 1 投票 0

重新启动后用户范围的设置更改丢失

我定义了一个名为 SizeSliderValue 的 suser 范围设置。 在cs代码的最上面; 使用系统; 使用系统.IO; 使用 System.Threading.Tasks; 使用系统.Windows; 使用 System.Windows.Controls;

回答 1 投票 0

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