WPF TextBox重新计算大小

标签 wpf wpf-controls

当使用没有显式高度和宽度值的 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/

相关文章:

c# - WPF/C#画半圆/半圆

c# - 仅保存图像的顶部部分

c# - 播放后强制 MediaElement 释放流

c# - Windows 7 中菜单选项卡上的下拉按钮

c# - WPF - 根据附加属性的值重用具有不同设置的 UserControl

c# - 所有文本完全丢失或呈现为方框

c# - 免费 WPF 实时图表

c# - 为什么只有一些子元素的属性由其父元素定义

wpf - Caliburn Micro,绑定(bind)和通知

c# - 动态创建窗口时按钮居中对齐