2013-01-05 42 views
0

我有一個用戶控件,裏面包含一個圖像,一個文本框和一個按鈕。 它實現了MeasureOverride()ArrangeOverride(),它基本上考慮了文本框的Text屬性來調整自己的大小。在Windows Store應用程序中是否有與AffectsRender類似的東西?

但是...... ArrangeOverride()MeasureOverride()只被調用一次,之前設置了文本。在通過數據綁定更改/更新文本後,它們不會再次被調用來重新計算。

我知道在WPF中有一個AffectsRender元數據標誌,也是InvalidateVisual,但我在Windows 8 Runtime land中。我如何在這裏做到這一點?

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 
} 

回答

1

我覺得這和Silverlight的情況很相似。沒有元數據幻想,您需要在適當的元素上設置屬性更改/事件處理程序並觸發無效。因此,例如在您感興趣的元素的TextChangedSizeChanged之類的事件上註冊一個事件處理程序,並調用InvalidateMeasure,InvalidateArrangeUpdateLayout之一來強制佈局週期。

+0

正是我在找的,謝謝! – swinefeaster

相關問題