问题标签 [layouttransform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
416 浏览

wpf - RenderTransform 与面板属性与布局转换

我想知道实现拖动移动的最佳UIElements方法Panels

我们知道 ,Canvas.SetTop等比Render Transform 稍微快一些,也可能是更适合布局的方式.Right.Left

  • 其他类型的面板上的自由拖动移动行为怎么样?

  • 如何在调整/拖动子项的大小时应用 Canvas SetLeft 并保持偏移Grid

显然似乎完全不连贯,因为其他面板类型采用的特定布局,但在某些情况下,采用替代原始面板行为的自由定位拖动移动行为可能很有用(在网格中的列之间拖动等......)

也许具有Bool IsDragEnabled在原始面板行为和拖动移动行为之间切换的属性。

0 投票
0 回答
2146 浏览

wpf - 自动缩放 WPF TextBox/RichTextBox 内容以适应可用空间

我有以下问题:

我想设置一个 RichTextBox,它可以自动调整内容的大小以适应最大的可用空间,同时不改变内容的布局(例如字体大小、缩进等)。

我已经看到很多关于缩放 TextBox 内容的问题,但所有问题都与某种缩放滑块有关。我想要的是真正计算缩放比例,以便它自动最适合文本框。

到目前为止,我在 RichTextBox 模板的 AdornerDecorator 中建立了一个 LayoutTransform,该模板包含在 ScrollViewer 中,以便我可以触发代码隐藏方法来计算缩放。

最初,当所有内容都适合 ViewPort 时,RichTextBox 不应缩放。只要需要启用垂直 ScrollBar,我就会更改 ScaleFactor。

只要不涉及 TextWrapping 就可以很好地工作(因此 X 和 Y 的缩放不会导致文本在不同位置换行并另外改变高度)。有任何想法吗?

我创建了一个小演示,让事情更清楚一点:

和代码隐藏:

0 投票
1 回答
502 浏览

xaml - WP7:LayoutTransform 一个 ListBoxItem

这是我的 XAML:

在此代码隐藏(如下)中,我试图为删除操作设置动画。选择该项目后,我将其删除。我使用 ScaleTransform 对其进行视觉动画处理。在 WPF 中,我会使用 LayoutTransform,但由于我在 WP/SL 中只有 RenderTransform,所以我使用的是 RenderTransform——因此,周围的布局不会响应大小的变化。该记录仍被正确删除,但视觉效果减弱。

有没有办法在 WP 中做到这一点?有没有办法调整 ListBoxItem 的大小以便周围的内容响应?

0 投票
2 回答
1938 浏览

wpf - 为什么 WPF 网格的行高不调整为其内容的高度?

我有一个类似于这样的网格:

myNamespace:MyRotatedTextBlock 是一个自定义的 WPF 控件,如下所示:

问题是当我打开窗口时,我看不到包含旋转文本的第二行。但是,如果我将Height第二行(设置为"Auto")替换为 ,"100"那么我可以看到显示了第二行并且它包含MyHeader2

0 投票
3 回答
4483 浏览

wpf - ScaleX 和 ScaleY 上的 LayoutTransform 动画正在破坏与它们的绑定

我有一个自定义类,说从 wpf Canvas 类派生的“MyCanvas”。MyCanvas 有一个依赖属性“Scale”,它指定画布的比例变换。现在,当 Scale 的值发生变化时,我想为从旧值到新值的转换设置动画。为此,我正在使用LayoutTransform.BeginAnimation(...)方法。

代码:

圣诞节:

但是在执行此代码后,与(视图模型中的一个属性)的绑定ScaleX正在ScaleY中断Scale,即更改的值Scale不会改变画布上的比例。

错误消息(使用 Snoop):

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleX' (type 'Double')

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleY' (type 'Double')

请让我知道是否有人对此有解决方案。谢谢

0 投票
2 回答
4218 浏览

wpf - 应用 LayoutTransform 与 RenderTransform 的性能影响?

我已经处理过 LayoutTransform 和 RenderTransform 并且我知道每个都适合我在以前的项目中发现的特定场景。

然而,从性能的角度来看,在使用 WPF 分析工具时,例如,哪个对 UI 性能的影响较小?

0 投票
2 回答
5519 浏览

wpf - RotateTransform 移动我的图像以及旋转它

好的,所以我有一个要围绕其左上角旋转的 Image 对象。我设置了一个 'X' 度的 RotateTransform。我的图像的边距设置为 (400,400,0,0)。这将它集中在画布上。

问题是当我应用不同的旋转角度时,图像会向右和向下移动。看帖子,我现在明白为什么会这样了。旋转变换计算出一个边界矩形,因此如果您旋转图像,它将有一个更大的边界矩形。边距应用于该边界矩形,这会导致实际图像随着角度的变化而向下和向右移动。

我想要的是图像的左上角在我的画布上始终精确地位于 (400,400) 处,并且图像围绕该点旋转。

我已经做了一些计算,可以通过移动左边距和上边距来让它表现出来,但只能使用以下等式在象限 1 和 4(0-90 度)和(270-360 度)中得到正确的计算:

对于 0-90 度:(只需更改边距的顶部部分。所需边距为 (400,400,0,0) Margin=(400-sin(angle)*Image.Height, 400, 0, 0);

对于 270-360 度:(只需更改页边距的 TOP 部分。所需页边距为 (400,400,0,0) Margin=(400, 400 + sin(angle)*Image.Width, 0, 0);

我已经尝试使用 RotateTransform.Transform(point) 和 Image.TranslatPoint(point) 但似乎无法让它们工作。

有人对我有什么建议吗?

我想如果我能在任何给定时间弄清楚图像的绑定矩形是什么,我就可以找出它的宽度/高度和我的图像宽度/高度之间的差异,并使用它来适当地移动边距。

我已经整理了一个小应用程序来显示我的问题。运行时,应用程序在我希望矩形左上角的位置显示一个红点。我将其简化为使用网格而不是图像。在屏幕的左上角,有一个文本框,您可以在其中指定旋转角度。文本框的右侧是两个重复按钮,如果您单击并按住它们,它们会增加和减少角度。请注意,当您更改角度时,网格的左上角如何远离红点。我希望它表现得就像你在左上角放了一个大头针,然后围绕大头针旋转它,而不从角落开始的点移动。

谢谢你的帮助。

这是示例应用程序的代码:

xml:

代码隐藏:

0 投票
1 回答
4204 浏览

wpf - 将其 LayoutTransform 设置为 TranslateTransform 或 MatrixTransform 时,Canvas 子项的翻译不起作用

我有一个简单的应用程序,它由一个包含画布(rootCanvas)的窗口组成。我正在尝试为此添加另一个画布(测试)并将不同的变换应用于子画布的 LayoutTransform。这一切都是以编程方式完成的,而不是使用 XAML。

一些转换正在工作,而另一些则不如下:

  • 当 LayoutTranform 设置为 RotateTransform 时,它会按预期工作。
  • 当它设置为 TranslateTransform 时,似乎没有应用翻译,并且测试 Canvas 仍然位于 rootCanvas 的顶角
  • 当它设置为通过应用旋转和平移构建的 MatrixTransform 时,似乎只应用了旋转。

代码如下:

如果有人能解释我在这里做错了什么,我将非常感激,因为我不明白为什么翻译似乎没有像我预期的那样工作。

提前致谢,

威布斯

0 投票
1 回答
1396 浏览

wpf - 具有动态 LayoutTransform 的 WPF 工具提示样式

我有一个可以缩放它的 UI 的应用程序,我想用它来缩放工具提示。我试过这样做:

...scaleTransf我通过代码更改的资源在哪里:

和:

大多数工具提示的大小都会按比例缩放,但其中一些由 C# 代码创建的提示不会按比例缩放。我检查过,似乎我没有通过代码设置他们的 Style 或 LayoutTransform,所以我真的不明白出了什么问题......此外,我的印象是上面的 XAML 代码运行了几天前。:(

我可以做些什么来让它一直工作而不在代码隐藏中设置 LayoutTransform 吗?

编辑:不改变比例的工具提示是以前可见的。

EDIT1:如果我将LayoutTransform每个ToolTip实例的设置为scaleTransf在代码后面使用SetResourceReference()一切正常。我不明白为什么样式不起作用,而它应该对ToolTip创建的每一个都做完全相同的事情......基于我对 WPF 的有限知识,我将其称为 BUG!


编辑2:

我也试过这个:


EDIT3:我尝试使用 DependencyProperty 解决此问题:

在 MainWindow.xaml.cs 中:

在 MainWindow 的某处,响应用户输入:

XAML 样式:

使用此代码,似乎没有一个工具提示可以相应地缩放。

0 投票
1 回答
721 浏览

wpf - WPF:在使用 LayoutTransform 修改大小的图像中获取 1:1 像素渲染

首先让我说我已经对此进行了广泛的搜索并找到了部分答案,但没有任何方法可以奏效。

我需要在我的 WPF 应用程序中显示未缩放的位图图像。我想将位图的 1 个像素映射到显示器的 1 个像素。我确实打算通过发送多个版本的位图来支持多种分辨率。But I want to know that, when a particular bitmap has been chosen, it will be rendered EXACTLY as it has been designed.

我克服 WPF 中发生的自动缩放的策略是查看自动应用的内容(通过 OS DPI 设置),然后将相反的 LayoutTransform 应用到我的窗口的最外层容器。

这可确保无论用户的 DPI 设置是什么,应用程序都会以 1:1 的 WPF 像素与硬件像素的比率呈现窗口内容。到目前为止,一切都很好。

该代码看起来像这样。(假设这是使用参数 1.0 调用的)。

到这里为止,一切都很好。无论我将我的 Windows DPI 设置为什么,该主容器的内容总是完全相同的大小,并且位图被精确渲染。

有趣的来了。我想通过提供特定分辨率的艺术作品来支持不同的屏幕分辨率,并适当地缩放我的整个 UI。

事实证明 LayoutTransform 非常适合这个。因此,如果我用 1.25 或 1.5 或其他任何值调用上述方法,则整个 UI 会缩放,并且一切看起来都很完美……除了我的图像,即使我将源更改为图像完全适合新的缩放尺寸。

例如,假设我在 XAML 中有一个 100x100 的图像。我的作品有三种风格:100x100、125x125 和 150x150。当我缩放容纳图像的容器时,我还将该图像的源更改为适当的源。

有趣的是,如果图像对象所在的位置在按因子缩放时会产生积分结果,那么缩放后的图像看起来很好。也就是说,假设图像具有以下属性:

当我们应用 1.25 的因子时,得到 15 和 125,图像看起来很棒。但是如果图像移动了一个像素,就说:

现在,当我们应用 1.25 的因子时,我们得到 15.25 和 125,结果看起来很糟糕。

显然,这看起来像是某种舍入问题或类似问题。所以我试过:

我已经在窗口、正在缩放的​​容器和图像对象中尝试了这些。没有任何效果。无论如何,BitmapScalingMode 并没有真正的意义,因为图像根本不应该被缩放。

永远感谢任何能对此有所了解的人。