Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF TabControl:选择其他选项卡时卸载的子项_Wpf_Treeview_Tabcontrol_Onunload - Fatal编程技术网

WPF TabControl:选择其他选项卡时卸载的子项

WPF TabControl:选择其他选项卡时卸载的子项,wpf,treeview,tabcontrol,onunload,Wpf,Treeview,Tabcontrol,Onunload,选择其他选项卡时,是否可以防止WPF TabControl卸载TabItem的子项 我面临的问题与这里描述的问题类似: 这里提供的解决方案似乎只有在TabControl是数据绑定的情况下才起作用。 如果添加TabItems,则不起作用: <local:TabControlEx> <TabItem Header="First Tab"> <TreeView ItemsSource="{Binding TreeNodes}" Unloaded

选择其他选项卡时,是否可以防止WPF TabControl卸载TabItem的子项

我面临的问题与这里描述的问题类似:

这里提供的解决方案似乎只有在TabControl是数据绑定的情况下才起作用。 如果添加TabItems,则不起作用:

<local:TabControlEx>

    <TabItem Header="First Tab">
        <TreeView ItemsSource="{Binding TreeNodes}" Unloaded="treeView_Unloaded">
            <TreeView.Resources>
                <DataTemplate DataType="{x:Type local:NodeViewModel}">
                    <TextBlock Text="{Binding NodeName}" />
                </DataTemplate>
            </TreeView.Resources>

            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                </Style>
            </TreeView.ItemContainerStyle>
        </TreeView> 
    </TabItem>

    <TabItem Header="Second Tab">
        <TextBlock Name="txText2">Second Text 2</TextBlock>
    </TabItem>

</local:TabControlEx>

第二文本2
当您选择“第二个选项卡”时,将触发treeView_卸载

背景:
在我的实际应用程序中,其中一个选项卡项包含一个UserControl,其中包含一个数据绑定TreeView:TreeView.IsSelected绑定到属性。设置绑定到IsSelected的属性将选择相应的TreeViewItem。如果用户切换到另一个选项卡,则树状视图将被卸载(从VisualTree中删除)。在这种情况下,在没有相应TreeView项的任何节点上,将IsSelected设置为true会导致TreeView行为不正常-可能是因为TreeView没有为应选择的节点创建TreeView项,因为TreeView当前不是可视树的一部分。因此,我想要实现的是,我可以通过将IsSelected设置为true来选择任何其他节点,即使TreeView当前位于不可见选项卡上。将TreeView移动到TabControl之外的某个位置似乎可以解决问题-即使它位于可见性已崩溃的面板内。因此,可见性似乎不是问题,但树视图当前不是可视化树的一部分。

如果您基于TabControl的默认控件模板覆盖控件模板,则原始问题中提供的解决方案有效: -删除ContentPresenter -添加一个名为PART_ItemsHolder的网格

不再有卸载的事件-当TreeView位于未选择的选项卡项上时,它不再有问题