私のアプリケーション UI は 2 つの部分に分かれています。左側はナビゲーション メニューで、右側は選択したメニュー コンテンツが表示されるビュー エリアです。さて、メニューの1つがレポートです。ヘッダーとコンテンツ テンプレートで Tabcontrol を使用しています。テンプレートには、DataType として ViewModel があり、UserControl であるそれぞれの View としてコンテンツがあります。この TabControl は、水平方向および垂直方向の配置としてストレッチするように設定されたスクロール ビューアー内にあります。
ユーザー コントロールは、子として reportviewer を持つ ReportHost にバインドされた Grid 内の ContentPresenter をホストします。この ReportViewer を使用してレポートを生成しています。
ユーザーがレポートを開くと、新しいタブで開きます。タブヘッダーが表示領域内に含まれるようなタブの数になるまで、正常に機能します。しかし、タブが追加されるとすぐに、タブコントロールの幅が伸び、タブのコンテンツ領域が伸び、コンテンツプレゼンターも伸びて水平スクロールが表示されます。これにより、最終的にレポートが引き伸ばされ、何らかの理由で、私にはわかりませんが、レポートが UI の一部ではなく、UI の一部ではないかのように、UI のナビゲーション領域に重なってしまいます。スクロールすると、レポート全体が表示領域とナビゲーション メニューの上に表示され続けます。
ScrollViewer に MaxWidth を提供することで修正できますが、そうしたくありません。tabcontroll または Scrollviewer の幅を純粋に使用可能なビュー領域に基づいて決定したいと思います。固定幅を使用せずにコードまたは XAML を使用してこれを行うにはどうすればよいですか。
状況を説明できたかどうか自信がありません。さらに詳しい情報や説明が必要な場合はお知らせください。詳細をお知らせいただければ幸いです。
編集:情報のコードを追加します。
<DataTemplate x:Key="TabContent" DataType="{x:Type VM:ReportViewModel}">
<View:Report/>
</DataTemplate>
<DataTemplate x:Key="TabHeader" DataType="{x:Type VM:ReportViewModel}">
<ContentPresenter Content="{Binding Path=TabHeader}"
VerticalAlignment="Center"/>
</DataTemplate>
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap"
Text="Reports" VerticalAlignment="Top" Margin="10,13,0,0"
FontSize="18.667" FontFamily="Segoe UI" Foreground="White"/>
<Border BorderThickness="0" Margin="0,50,0,0"
Background="{DynamicResource Brush_HeaderNew}" Height="50" Width="Auto"
VerticalAlignment="Top"/>
<TabControl ItemsSource="{Binding ReportItems}" Grid.Row="1" Margin="0,20,0,0"
SelectedItem="{Binding SelectedReportItem}"
ContentTemplate="{StaticResource TabContent}"
ItemTemplate="{StaticResource TabHeader}"
/>
</Grid>
</ScrollViewer>