모든,ScrollViewer는 내가하는 일에 상관없이 모든 것을 처리합니다. :(
나는 WPF로 초보자 오전이 많은 사람들이. 나는 단지. 다음 프로그래밍 코드에로드 XAML의 다음 조각을 함께 넣어 가지고 투쟁 문제가 될 것으로 보인다 템플릿을 사용하고 코드 인스턴스화 된 TabControl 개체에 적용됩니다. 거기에서 탭 및 탭 임의의 가짜 데이터를 생성합니다. 문제는 내 TabControl의 ScrollViewer 무한히 모든 것을 넘어서서 및 스크롤 때문에 성장하고있다. 설정하려고했습니다. 모든 VerticalAlignment가 "Stretch"로 트리를 확장했지만 도움이되지 않았습니다. 런타임에 여러 사용자 화를 결합하여 인스턴스화하는 것이 간단한 문제라는 느낌이 들었습니다. 어떤 도움이라도 대단히 감사하겠습니다.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
Title="Window2">
<TabControl>
<TabControl.Template>
<ControlTemplate TargetType="TabControl">
<DockPanel VerticalAlignment="Stretch">
<ScrollViewer VerticalAlignment="Stretch">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid" VerticalAlignment="Stretch" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Corner" Grid.Column="0" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
<ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
<ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<TabPanel x:Name="HeaderPanel"
Panel.ZIndex ="1"
KeyboardNavigation.TabIndex="1"
Grid.Column="0"
Grid.Row="0"
Margin="2,2,2,0"
IsItemsHost="true"/>
</ScrollViewer>
<ContentPresenter x:Name="PART_SelectedContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent"/>
</DockPanel>
</ControlTemplate>
</TabControl.Template>
</TabControl>
TabControl tabs = new TabControl();
string xamlPath = System.IO.File.ReadAllText("..\\..\\Resources\\Templates\\Template.xaml");
Window window = (Window)XamlReader.Parse(xamlPath);
tabs.Template = ((TabControl)window.Content).Template;
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
DataTable dataTable = new DataTable();
for (int x = 0; x < 50; x++) dataTable.Columns.Add(x.ToString(), typeof(double));
for (int x = 0; x < 50; x++)
{
DataRow dataRow = dataTable.NewRow();
dataTable.Rows.Add(dataRow);
}
DataView dataView = new DataView(dataTable);
for (int x = 0; x < 50; x++)
{
for (int y = 0; y < 50; y++) dataView[x][y] = rand.Next()%100;
}
DataGrid table = new DataGrid();
table.ItemsSource = dataView;
TabItem tab = new TabItem();
tab.Header = "Tab " + (i+1);
tab.Content = table;
tabs.Items.Add(tab);
}
tabs.TabStripPlacement = Dock.Left;
tabs.VerticalAlignment = VerticalAlignment.Stretch;
tabs.HorizontalAlignment = HorizontalAlignment.Stretch;
option.canvas.Children.Add(tabs);
사용자는 TabControl을 제한하지 않습니다. 높이와 너비가있는 격자에 넣어야합니다. * – Paparazzi