在Windows Store应用程序中是否有类似的AffectsRender

本文关键字:AffectsRender 是否 Windows Store 应用程序 | 更新日期: 2023-09-27 17:50:54

我有一个用户控件,其中包含一个图像,一个文本框和一个按钮。它实现了MeasureOverride()ArrangeOverride(),基本上考虑了文本框的Text属性来调整自己的大小。

但是…ArrangeOverride()MeasureOverride()只被调用一次, Text之前设置。在通过数据绑定更改/更新Text之后,不会再次调用它们来重新计算。

我知道在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
}

在Windows Store应用程序中是否有类似的AffectsRender

我认为这与Silverlight中的情况类似。没有元数据,您需要在适当的元素上设置属性更改/事件处理程序并触发无效。例如,在您感兴趣的元素的TextChangedSizeChanged上注册一个事件处理程序,并调用InvalidateMeasure, InvalidateArrangeUpdateLayout中的一个来强制布局循环。