當使用沒有明確高度和寬度值的wpf文本框,並且有可用空間展開時,文本框會在鍵入時調整大小。WPF TextBox重新計算大小
但是,當我改變邊框厚度時,它不會重新計算它,對於非常厚的邊框,部分文本被邊框覆蓋。我如何明確沉澱重新計算?
巧合的是我使用派生的自定義文本框類,所以我應該知道邊界厚度的變化。
當使用沒有明確高度和寬度值的wpf文本框,並且有可用空間展開時,文本框會在鍵入時調整大小。WPF TextBox重新計算大小
但是,當我改變邊框厚度時,它不會重新計算它,對於非常厚的邊框,部分文本被邊框覆蓋。我如何明確沉澱重新計算?
巧合的是我使用派生的自定義文本框類,所以我應該知道邊界厚度的變化。
此錯誤,必須進行一些優化出了錯
BorderThickness
或添加一個依賴屬性,影響措施,安排或渲染不利於看起來大小似乎只是重新計算一次Text
,Width
,Height
或可用空間的變化。我用反射器環顧四周,但事情變得非常複雜,所以我找不到這個來源。
這裏是一個小的變通方法,聽在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;
}
}
首先,這看起來像一個bug。
如果問題在於不考慮邊界厚度的動態變化,則可以通過創建AffectsMeasure
的依賴項屬性在FrameworkPropertyMetadata
中進行解決,並將其綁定到邊框厚度。希望這個怪癖有幫助。
如果不考慮邊框厚度的靜態設置,則可以嘗試用您自己的(正確)版本替換TextBox的默認模板。
AffectsMeasure沒有幫助。如果我在改變厚度後開始打字,事情就會重新調整,所以它也不是一個靜態問題。 – NVM 2011-03-05 20:57:48
我確定它是一個bug,但它在凌晨2:30在這裏我需要一個真正的快速修復,不管它有多髒。 :D – NVM 2011-03-05 20:59:05
@NVM:在這種情況下,可能只是將邊框包含爲外部控件?必須足夠快速和骯髒:-) – Vlad 2011-03-05 23:12:15