Это поведение по умолчанию, если ваши TabControl
задают ContentTemplate
.TabControls используют виртуализацию, поэтому они будут повторно использовать шаблон при переключении вкладок вместо создания новой каждый раз.
Это означает, что один и тот же ScrollViewer
используется независимо от того, на какой вкладке вы находитесь. Вы можете доказать это, добавив событие Loaded
к вашему ScrollViewer
, и вы увидите, что оно вызывается только один раз.
Одним из способов решения этой проблемы является использование DataTemplate с x:Shared="False"
, поэтому он не будет совместно использовать шаблон. Я не проверял, есть ли какие-либо проблемы с производительностью с этим.
<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
.