wpf 有没有办法设置UIElement的宽度和高度?

toiithl6  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(304)

是否有一种方法可以设置UIElement的大小(而不强制转换为FrameworkElement),可能类似于在UIElement上使用RenderSize镜像通过FrameworkElement上的ActualWidthActualHeight获取大小信息的方式?
实际上,我猜您可以说我想设置UIElementRenderSize
我正在沿着一种方法,该方法将以某种方式使我能够强制一个具有所需大小的测量/排列通道,但似乎无法找到一个适当的攻击点。

3bygqnnd

3bygqnnd1#

最接近的方法是在UIElement上调用Arrange(finalRect)如果元素的ArrangeCore覆盖(和/或后续的OnRender)实现“延伸”到/利用整个给定区域(由finalRect),则其大小将相应地设置。
就我个人而言,我决定从WPF的UI瓶颈处将其截断,并构建自己的布局系统和一整套直接源自UIElement的UI控件。这样,我就避开了整个问题,因为我的祖父,UIElement的长子,具有从getgo内置的布局所需的所有成员-包括WidthHeight的属性(因此基本上是一个相当大的UIElement)。
然后,我的代码的其余部分只处理爷爷,即我的“FrameworkElement”版本(这是更有效的方式-因为它摆脱了所有的上下文/依赖关系/样式功能等,我无论如何都不需要。WPF为如此通用付出了代价)。
FrameworkElementWrapper控件包含在该系列中,如果需要在布局中包含任何传统的FrameworkElements

f1tvaqid

f1tvaqid2#

在2023年,现在我们有SetValue()UIElement。所以它可以间接地设置一些属性。例如,要设置UIElement的高度(不强制转换)。您可以使用以下代码

uIElement.SetValue(Shape.HeightProperty, 300.0);

SetValue()中找到所有相关属性有点困难,但这是可能的。

7jmck4yq

7jmck4yq3#

这看起来似乎是一个简单或显而易见的答案,但事实并非如此,您不能仅仅因为x1m2 n1,不具有这些属性就设置WidthHeightUIElement类只是提供一些基本功能的 * WPF核心级实现的基类 *。来自MSDN上的UIElement Class
UIElement具有以下由UIElement类专门定义的功能:
·可以作为子元素呈现(UIElement派生自Visual,一个高级图形类)
·包含用于调整UIElement的可能子元素的大小和位置的逻辑(由布局系统解释时)
·可以响应用户输入(包括通过处理事件路由或命令路由来控制将输入发送到何处)
·可以引发在逻辑元素树中沿路径行进的路由事件
·支持动画系统的某些方面
现在,当查看MSDN上的FrameworkElement Class页面时,我们看到:
FrameworkElement扩展了UIElement并添加了以下功能:
·布局系统定义:FrameworkElement为在UIElement中定义为虚拟成员的某些方法提供特定的WPF框架级别实现。最值得注意的是,FrameworkElement密封了某些WPF核心级别布局重写,而是提供派生类应该重写的WPF框架级别等效项。例如,FrameworkElement密封ArrangeCore但提供ArrangeOverride。这些更改反映了以下事实:在WPF框架中-在WPF核心级别上,将有一个完整的布局系统,可以呈现任何FrameworkElement派生类。在WPF核心级别上,将构成基于WPF的常规布局解决方案的某些成员已就位,但布局系统的实际引擎尚未定义。
我突出显示的粗体文本应该进一步解释了为什么不能设置UIElementWidthHeight

相关问题