gpt4 book ai didi

WPF TextBox重新计算大小

转载 作者:行者123 更新时间:2023-12-02 00:34:34 24 4
gpt4 key购买 nike

当使用没有显式高度和宽度值的 wpf 文本框时,并且有可用空间可扩展时,文本框会在您键入时调整大小。

但是,当我更改边框粗细时,它不会重新计算它,对于非常粗的边框,部分文本会被边框覆盖。我如何明确沉淀重新计算?

巧合的是,我正在使用派生的自定义文本框类,因此我应该知道边框粗细何时发生变化。

enter image description here

最佳答案

这个错误一定是一些优化出了问题

  • 覆盖 BorderThickness 的元数据或添加影响 Measure、Arrange 或 Render 的依赖属性都没有帮助
  • 从父容器取消停靠和重新停靠也没有效果
  • 如果新容器中的空间与旧容器中的空间完全相同,即使从父容器中脱离并重新停靠到新容器中也无济于事

似乎只有在 TextWidthHeight 或可用空间发生变化时才会重新计算大小。我用 Reflector 环顾四周,但事情变得非常复杂,所以我找不到它的来源。

这是一个小的变通方法,可以监听 BorderThickness 的变化,并在已更改的事件处理程序中对 Width 做一个小的更改,一旦它被更新,就改变它右后卫

public class MyTextBox : TextBox
{
public MyTextBox()
{
DependencyPropertyDescriptor borderThickness
= DependencyPropertyDescriptor.FromProperty(MyTextBox.BorderThicknessProperty, typeof(MyTextBox));
borderThickness.AddValueChanged(this, OnBorderThicknessChanged);
}
void OnBorderThicknessChanged(object sender, EventArgs e)
{
double width = this.Width;
SizeChangedEventHandler eventHandler = null;
eventHandler = new SizeChangedEventHandler(delegate
{
this.Width = width;
this.SizeChanged -= eventHandler;
});
this.SizeChanged += eventHandler;
this.Width = this.ActualWidth + 0.00000001;
}
}

关于WPF TextBox重新计算大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com