问题标签 [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.
wpf - RenderTransform 与面板属性与布局转换
我想知道实现拖动移动的最佳UIElements
方法Panels
。
我们知道 ,Canvas.SetTop
等比Render Transform 稍微快一些,也可能是更适合布局的方式.Right
。.Left
其他类型的面板上的自由拖动移动行为怎么样?
如何在调整/拖动子项的大小时应用 Canvas SetLeft 并保持偏移
Grid
?
显然似乎完全不连贯,因为其他面板类型采用的特定布局,但在某些情况下,采用替代原始面板行为的自由定位拖动移动行为可能很有用(在网格中的列之间拖动等......)
也许具有Bool IsDragEnabled
在原始面板行为和拖动移动行为之间切换的属性。
wpf - 自动缩放 WPF TextBox/RichTextBox 内容以适应可用空间
我有以下问题:
我想设置一个 RichTextBox,它可以自动调整内容的大小以适应最大的可用空间,同时不改变内容的布局(例如字体大小、缩进等)。
我已经看到很多关于缩放 TextBox 内容的问题,但所有问题都与某种缩放滑块有关。我想要的是真正计算缩放比例,以便它自动最适合文本框。
到目前为止,我在 RichTextBox 模板的 AdornerDecorator 中建立了一个 LayoutTransform,该模板包含在 ScrollViewer 中,以便我可以触发代码隐藏方法来计算缩放。
最初,当所有内容都适合 ViewPort 时,RichTextBox 不应缩放。只要需要启用垂直 ScrollBar,我就会更改 ScaleFactor。
只要不涉及 TextWrapping 就可以很好地工作(因此 X 和 Y 的缩放不会导致文本在不同位置换行并另外改变高度)。有任何想法吗?
我创建了一个小演示,让事情更清楚一点:
和代码隐藏:
xaml - WP7:LayoutTransform 一个 ListBoxItem
这是我的 XAML:
在此代码隐藏(如下)中,我试图为删除操作设置动画。选择该项目后,我将其删除。我使用 ScaleTransform 对其进行视觉动画处理。在 WPF 中,我会使用 LayoutTransform,但由于我在 WP/SL 中只有 RenderTransform,所以我使用的是 RenderTransform——因此,周围的布局不会响应大小的变化。该记录仍被正确删除,但视觉效果减弱。
有没有办法在 WP 中做到这一点?有没有办法调整 ListBoxItem 的大小以便周围的内容响应?
wpf - 为什么 WPF 网格的行高不调整为其内容的高度?
我有一个类似于这样的网格:
myNamespace:MyRotatedTextBlock 是一个自定义的 WPF 控件,如下所示:
问题是当我打开窗口时,我看不到包含旋转文本的第二行。但是,如果我将Height
第二行(设置为"Auto"
)替换为 ,"100"
那么我可以看到显示了第二行并且它包含MyHeader2
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')
请让我知道是否有人对此有解决方案。谢谢
wpf - 应用 LayoutTransform 与 RenderTransform 的性能影响?
我已经处理过 LayoutTransform 和 RenderTransform 并且我知道每个都适合我在以前的项目中发现的特定场景。
然而,从性能的角度来看,在使用 WPF 分析工具时,例如,哪个对 UI 性能的影响较小?
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:
代码隐藏:
wpf - 将其 LayoutTransform 设置为 TranslateTransform 或 MatrixTransform 时,Canvas 子项的翻译不起作用
我有一个简单的应用程序,它由一个包含画布(rootCanvas)的窗口组成。我正在尝试为此添加另一个画布(测试)并将不同的变换应用于子画布的 LayoutTransform。这一切都是以编程方式完成的,而不是使用 XAML。
一些转换正在工作,而另一些则不如下:
- 当 LayoutTranform 设置为 RotateTransform 时,它会按预期工作。
- 当它设置为 TranslateTransform 时,似乎没有应用翻译,并且测试 Canvas 仍然位于 rootCanvas 的顶角
- 当它设置为通过应用旋转和平移构建的 MatrixTransform 时,似乎只应用了旋转。
代码如下:
如果有人能解释我在这里做错了什么,我将非常感激,因为我不明白为什么翻译似乎没有像我预期的那样工作。
提前致谢,
威布斯
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 样式:
使用此代码,似乎没有一个工具提示可以相应地缩放。
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 并没有真正的意义,因为图像根本不应该被缩放。
永远感谢任何能对此有所了解的人。