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