在WPF 4.0中,切换选项卡会重置usercontrol UI

时间:2011-06-29 11:11:55

标签: wpf wpf-controls tabcontrol

我的边框包含HeaderedContentControl中的TabControl:

<Border Grid.Column="1" 
    Style="{StaticResource MainBorderStyle}">
    <HeaderedContentControl 
              Content="{Binding Path=Workspaces}"
              ContentTemplate="{StaticResource WorkspacesTemplate}"
              Header="Decision Workspaces"
              Style="{StaticResource MainHCCStyle}"/>
</Border>

TabControl在静态资源中定义:

<DataTemplate x:Key="ClosableTabItemTemplate">
    <DockPanel Width="120" ToolTip="{Binding Path=DisplayName, Mode=OneTime}">
        <Button 
    Command="{Binding Path=CloseCommand}"
    Content="X"
    Cursor="Hand"
    DockPanel.Dock="Right"
    Focusable="False"
    FontFamily="Courier" 
    FontSize="9"
    FontWeight="Bold"  
    Margin="0,1,0,0"
    Padding="0"
    VerticalContentAlignment="Bottom"
    Width="16" Height="16" 
    />
    <ContentPresenter 
        Content="{Binding Path=DisplayName, Mode=OneTime}"
        VerticalAlignment="Center" 
    />
    </DockPanel>
</DataTemplate>

<!--
This template explains how to render the 'Workspace' content area in the main window.
-->
<DataTemplate x:Key="WorkspacesTemplate">
    <TabControl 
  IsSynchronizedWithCurrentItem="True" 
  ItemsSource="{Binding}" 
  ItemTemplate="{StaticResource ClosableTabItemTemplate}"
  Margin="4"
  />
</DataTemplate>

绑定到HeaderedContentControl的Content属性的Workspaces属性具有一组UserControl,它们在选项卡中呈现。一切正常。

问题是,当我在其中一个UserControls中选择网格中的一行时,切换到另一个选项卡,然后返回,重置所选行。如果RowDetails打开也会发生同样的情况 - 当我切换回选项卡时,它会被折叠。

有什么方法吗?

编辑 :在查看针对TabControl行为的建议解决方案之后,如果我可能完全抛弃它,我就会徘徊。 UI的任何想法都可以让我保留几个相对复杂的UserControl并在它们之间切换,而不会丢失过程中的视觉效果?

谢谢!

1 个答案:

答案 0 :(得分:4)

这是TabControl的常见问题。因为它只显示所选标签的内容。如果您的选项卡本身不是可视化对象并且显示为DataTemplate,则在切换选项卡时将创建和释放控件。

此问题herehere有两种解决方案,它们会尝试保留每个标签的视觉效果。