【问题标题】:Invalidate control Width/Height, re-calculate through Alignment-stretch instead使控件宽度/高度无效,改为通过Alignment-stretch重新计算
【发布时间】:2017-02-03 12:31:05
【问题描述】:

我有一个控件,它的位置和大小取决于可以在运行时更改的属性值。它的宽度或高度都可以通过水平/垂直对齐设置为“拉伸”。

我有一个场景,我首先处于一种模式,我希望它垂直拉伸。我在后面的代码中手动设置了宽度,并将 VerticalAlignment 设置为 Stretch。然后属性得到更新,我想明确设置高度并将 Horizo​​ntalAlignment 设置为 Stretch。

我什至添加了调用

this.InvalidateMeasure();
this.InvalidateArrange();

属性更改后,但似乎不起作用。例如,在将高度设置为一个数字之后,它不会像我想要的那样被覆盖。

MSDN page 声明:

当在元素上显式设置 Height 和 Width 属性时,这些测量值在布局期间具有更高的优先级,并将取消将 Horizo​​ntalAlignment 设置为 Stretch 的典型效果。

那么如何“取消设置”控件的宽度/高度属性呢?

【问题讨论】:

    标签: c# xaml uwp uwp-xaml


    【解决方案1】:

    您可以将高度设置为 Double.NaN,将宽度设置为 Double.NaN

    【讨论】:

    • 不幸的是,当我尝试分配时,我得到了一个参数异常。
    • Double.NaN 是允许的。谢谢!
    • 如果你更新你对 Double.NaN 的回答,我会接受它,因为真的是你在正确的道路上给了我提示。
    • 虽然此解决方案有效,但它并不是对如何“取消设置”宽度/高度 (...) 问题的准确答案。答案是您应该使用ClearValue(DependencyProperty) 方法:this.ClearValue(WidthProperty)。不同之处在于设置double.NaN 会覆盖本地值,而ClearValue 会清除本地值,从而允许使用优先级较低的值,例如来自触发器、样式等的值(参见DP Value Precedence
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2017-10-21
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多