2010-03-12 44 views
2

假設我使用XamlReader更改控件的內容並將UIElement添加到控件的容器中,應該觸發哪些事件?有些時候SizeChanged會觸發,LayoutUpdated會改變..儘管在其他時候這些都不會發生,儘管改變了控件的內容。在Silverlight中更改控件內容時激發的事件

在我的情況下,我正在生成一個頁面上當前視圖的縮略圖視圖。用戶可以改變頁面的內容,因此縮略圖應該相應地更新。儘管如此,佈線更新,加載,SizeChanged並不總是可靠的,因爲內容發生了變化。

我只會打電話給我使用writeablebitmap的InvalidateThumbnail,但設置內容後太快,因此我會得到一個空白縮略圖。

此刻,我破解(卑躬屈膝)是等待幾毫秒的UI做渲染實際的新的內容之前,我可以可靠地創建縮略圖。但是,我寧願每次都觸發一個事件。

可能嗎?我應該看什麼事件?我見過CompositeTarget.Rendering,但那不是我想要的。

回答

1

由於內容是依賴項屬性,因此可以使用雙向數據綁定並在綁定屬性更改時進行處理。下面是一個例子

XAML

<Grid x:Name="LayoutRoot"> 
    <StackPanel> 
     <ContentControl x:Name="ContentControl" Content="{Binding ContentProperty, Mode=TwoWay}"/> 
     <Button Click="Button_Click" Content="Change Content"/> 
    </StackPanel> 
</Grid> 

代碼隱藏

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     ContentControl.DataContext = new SomeObject(); 

    } 
    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ContentControl.Content = XamlReader.Load("<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Text=\"Hello\"/>"); 
    } 
} 

public class SomeObject 
{ 
    private object _contentProperty = null; 
    public object ContentProperty 
    { 
     get 
     { 
      return _contentProperty; 
     } 
     set 
     { 
      _contentProperty = value; 
      MessageBox.Show("Content Changed"); 
     } 
    } 
} 
+0

什麼奇怪的是我還可以連接到網格的內容屬性,以尋找變化和invaldiate我的縮略圖,但它並沒有每次開火儘管已經改變的內容。我使用這種方法,但由於某些奇怪的原因,它不能按預期工作。 http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html – nyxtom 2010-03-12 18:01:39

+0

我將使用它作爲網格控件的替代方法。 – nyxtom 2010-03-15 14:14:38

+0

它仍然不能解決縮略圖的問題,但問題與Silverlight的潛在加載方法的工作方式有關。 – nyxtom 2010-03-15 14:15:16

相關問題