我需要我的应用程序仅在用户可见时才渲染图像。我试着附上。我尝试了以下(f#):
image.IsVisibleChanged.Add(fun e ->
if image.IsVisible & mtvCapture.Capture <> null then
mtvCapture.BeginCapture()
)
但这只是加载,不会延迟加载。 IsVisible如何工作,只有当用户将图像元素滚动到视图中时才会这样?
还尝试修改绑定源,如下所示:
public ImageSource ImageElementSource
{
get
{
if (Capture == null)
{
BeginCapture();
return loadingImageSource;
}
CaptureToWpfImage();
return imageElement.Source;
}
}
如果只在图像滚动到视图中时才能调用BeginCapture()?
答案 0 :(得分:1)
听起来你需要一些支持虚拟化的东西。这仅在加载时创建可见元素。所有其他元素在可见时都会变得懒惰。
使用VirtualizingStackPanel作为ListBox的示例
<ListBox Name="c_imageListBox">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding ImagePath}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>