【发布时间】:2012-02-09 02:05:31
【问题描述】:
我有一个选项卡控件,它具有一整套可关闭的选项卡项,每个选项卡项都有一个带有可滚动部分的视图(每个视图都是相同的不同实例),我遇到的问题是,如果你在一个标签上滚动它的级联到所有其他标签,如果有人能告诉我如何阻止这种情况发生,我正在徘徊?
谢谢大家:)
【问题讨论】:
-
什么是滚动的,一个文本框?可滚动的标签页中的控件是什么?
标签: wpf scrollbar tabcontrol
我有一个选项卡控件,它具有一整套可关闭的选项卡项,每个选项卡项都有一个带有可滚动部分的视图(每个视图都是相同的不同实例),我遇到的问题是,如果你在一个标签上滚动它的级联到所有其他标签,如果有人能告诉我如何阻止这种情况发生,我正在徘徊?
谢谢大家:)
【问题讨论】:
标签: wpf scrollbar tabcontrol
如果您的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。
【讨论】: