2014-01-06 41 views
1

我有以下代碼:WPF加載子控件按需

<Expander Header="Expander" HorizontalAlignment="Left" Margin="64,105,0,0" VerticalAlignment="Top"> 
      <Grid Background="#FFE5E5E5" Width="334"> 
       <Button Content="MyButton" /> 
      </Grid> 
</Expander> 

基本上我試圖讓我的應用程序加載的按鈕,在擴展由用戶擴展。我這樣做的原因是我的應用程序將有多個擴展器,每個擴展器將託管許多UI控件。如果我一次加載所有應用程序,我的應用程序將快速耗盡內存,所以我只想在用戶擴展擴展器時加載它的子控件。

會將可見性設置爲在加載時摺疊,然後在用戶展開時可見可以做到這一點嗎?

編輯:用戶界面虛擬化不是一個選項,因爲我需要基於像素的滾動(如果我打開UI虛擬化將被禁用)。

+1

'我的應用程序都會有一些擴展,每個擴展器將舉辦許多UI controls' - 你正在尋找一個虛擬化的ItemsControl 。 WPF已經有了,不要試圖重新發明輪子。 –

+1

對不起。忘了補充。因爲我需要基於像素的滾動(如果我開啓了UI虛擬化,將會禁用),因此UI虛擬化不是一種選擇。 – user1928346

+0

.Net 4.5是您的選擇嗎?它支持基於像素的虛擬化UI –

回答

1

爲了簡化本示例,我們將擴展器的內容解耦爲某個用戶控件。

<!--MyUserControl will contain: --> 
<Grid Background="#FFE5E5E5" Width="334"> 
     <Button Content="MyButton" /> 
</Grid> 

現在你只能選擇添加動態的內容:

<Expander Expanded="OnExpanded"/> 

private void OnExpanded(object sender, RoutedEventArgs e) 
{ 
    var expander = (Expander)sender; 

    if(expander.IsExpanded) 
     if (expander.Content == null) 
      expander.Content = new MyUserControl(); 
}