多个选项卡在 WPF、C# 中并行呈现

本文关键字:并行 WPF 选项 | 更新日期: 2023-09-27 18:31:25

假设我有 3 个不同的浏览器选项卡项,我希望在打开窗口应用程序后同时加载和呈现所有选项卡。

我的问题:对于可以并行或线程呈现的每个选项卡,是否有任何方法?

多个选项卡在 WPF、C# 中并行呈现

您可以使用

使用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 线程上呈现。