WPF按需加载子控件

时间:2014-01-06 14:14:02

标签: wpf user-interface

我有以下代码:

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

基本上我只是在用户扩展扩展器时尝试让我的应用程序加载按钮。我这样做的原因是我的应用程序将有许多扩展器,每个扩展器将托管许多UI控件。如果我一次加载所有应用程序将很快耗尽内存,所以我想让扩展器只在用户扩展时加载其子控件。

在用户扩展时将可见性设置为Collapsed,然后在用户展开时可见吗?

编辑:UI虚拟化不是一个选项,因为我需要基于像素的滚动(如果我打开了UI虚拟化,它将被禁用)。

1 个答案:

答案 0 :(得分: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();
 }