WPF选项卡项目问题中的滚动条

时间:2012-02-09 02:05:31

标签: wpf scrollbar tabcontrol


我有一个Tab控件,它有一整套紧密的标签项,每个标签项都有一个带有滚动部分的视图(每个视图都是相同的不同实例),我遇到的问题是,如果你在一个标签上滚动它的级联到所有其他标签,如果有人可以告诉我如何阻止这种情况发生,我在徘徊? 谢谢所有:)

1 个答案:

答案 0 :(得分:2)

如果TabControl指定ContentTemplate,这是默认行为.TabControls使用虚拟化,因此当您切换标签而不是每次都创建新标签时,它们将重新使用模板。

这意味着无论您使用哪个标签,都会使用相同的ScrollViewer。您可以通过向Loaded添加ScrollViewer事件来证明这一点,并且您会看到它只会被调用一次。

解决此问题的一种方法是使用具有x:Shared="False"的DataTemplate,因此它不会共享模板。我还没有测试过,看看是否有任何性能问题。

<DataTemplate x:Key="TestTemplate" x:Shared="False">
    <local:UserControl1 />
</DataTemplate>

<Style x:Key="TabItemStyle" TargetType="{x:Type TabItem}">
    <Setter Property="Header" Value="Test" />
    <Setter Property="ContentTemplate" Value="{StaticResource TestTemplate}" />
</Style>

...

<TabControl ItemsSource="{Binding SomeCollection}"
            ItemContainerStyle="{StaticResource TabItemStyle}" />

请注意,这似乎非常挑剔......例如,我需要将ScrollViewer放在UserControl中,否则它将无效。我还需要设置TabItem.ContentTemplate而不是TabControl.ContentTemplate