多个选项卡在 WPF、C# 中并行呈现
本文关键字:并行 WPF 选项 | 更新日期: 2023-09-27 18:31:25
假设我有 3 个不同的浏览器选项卡项,我希望在打开窗口应用程序后同时加载和呈现所有选项卡。
我的问题:对于可以并行或线程呈现的每个选项卡,是否有任何方法?
您可以使用
使用ListBox
而不是默认ContentPresenter
的自定义模板来破解它:
<TabControl>
<TabItem Header="A">
<WebBrowser Source="http://www.google.com/" />
</TabItem>
<TabItem Header="B">
<WebBrowser Source="http://www.bing.com/" />
</TabItem>
<TabItem Header="C">
<WebBrowser Source="http://www.yahoo.com/" />
</TabItem>
<Control.Template>
<ControlTemplate TargetType="TabControl">
<DockPanel>
<TabPanel IsItemsHost="True"
DockPanel.Dock="{TemplateBinding TabStripPlacement}" />
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Items}"
SelectedIndex="{TemplateBinding SelectedIndex}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter Content="{Binding Content}"
ContentTemplate="{Binding ContentTemplate}"
ContentTemplateSelector="{Binding ContentTemplateSelector}" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Visibility"
Value="Hidden" />
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Visibility"
Value="Visible" />
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
</ListBox>
</DockPanel>
</ControlTemplate>
</Control.Template>
</TabControl>
请注意,呈现仍然发生在一个线程上,但由于 WebBrowser
控件的性质,页面在后台加载。
窗口可以在其自己的单独 UI 线程中启动。但选项卡将在启动当前窗口的 UI 线程上呈现。