0

私のアプリケーション 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>
4

1 に答える 1

1

ScrollViewerは、自分自身が利用できるスペースよりも大きい場合にスクロールを提供できると考えているため、自分自身を配置するための無限に大きな領域を子に提示しScrollViewerます。あなたのものは両方向のスクロールが有効になっているため、TabControlはどちらの方向にも好きなだけ拡張でき、それが a の内部にScrollViewerあり、タブがこの仮想を利用しないようにすることを知るほどスマートではありません。スペース。

物事の音から、セット全体ではなくタブのコンテンツのみがスクロール可能になるように、ScrollViewer内を移動することを検討することをお勧めします。TabControlタブ コンテンツ テンプレートを変更することで、これを実行できるはずです。

于 2012-04-19T13:34:30.583 に答える