我有一个用户控件,其中包含一个图像、一个文本框和一个按钮。它实现了MeasureOverride()
and ArrangeOverride()
,它基本上考虑了文本框的 Text 属性来调整自身的大小。
但是......ArrangeOverride()
并且在设置文本之前MeasureOverride()
只调用一次。通过数据绑定更改/更新文本后,它们不会再次被调用以重新计算。
我知道 WPF 中有一个AffectsRender
元数据标志,还有一个InvalidateVisual
,但我在 Windows 8 运行时领域。我怎么能在这里做到这一点?
protected override Size MeasureOverride(Size availableSize)
{
Size panelDesiredSize = new Size();
m_textbox.Measure(availableSize);
if (m_textbox.DesiredSize.Height < m_textbox.MinHeight)
{
panelDesiredSize = new Size(
m_textbox.DesiredSize.Width, m_textbox.MinHeight);
}
else
{
panelDesiredSize = m_textbox.DesiredSize;
}
return panelDesiredSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
double x = 0;
double y = 0;
m_textbox.Arrange(new Rect(new Point(x, y), finalSize));
m_button.Arrange(new Rect(new Point(x, y), finalSize));
m_image.Arrange(new Rect(new Point(x, y), finalSize));
m_button.Width = finalSize.Width;
m_button.Height = finalSize.Height;
m_image.Width = finalSize.Width;
m_image.Height = finalSize.Height;
return finalSize; // Returns the final Arranged size
}