我有以下代码:
<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虚拟化,它将被禁用)。
答案 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();
}