2016-12-20 18 views
0

私はUserControlの内部にDataGridを持っています。 DatagridはItemsSourceに50項目(50行)でバインドされています。 UserControl WidthとHeightはautoに設定されています。 DataGridの高さと幅を指定せずにScrollBarを有効にするにはどうすればよいですか?私がDataGrid Heightが5000(Auto計算に基づく)であることをデザイナーに示しているので、ScrollBarが表示されていないのが原因です。 DataGridをメインウィンドウのコンテナに合わせて、グリッドローにスターサイズで合わせたい。 この画面を別の画面解像度で使用したいので、固定サイズを使用したくありません。WPF DataGrid vertical ScrollBarは常に無効にされています

<UserControl x:Class="Treasury7MD.Views.Form7MDTableHeadeView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" > 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

     <Grid Grid.Row="1" Style="{StaticResource FormGridBorderStyle}" Margin="20,0,0,20" > 
      <Grid.Resources> 
       <Style TargetType="{x:Type Border}"> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="BorderBrush" Value="Black"/> 
       </Style> 
      </Grid.Resources> 


       <DataGrid x:Name="dg" ItemsSource="{Binding KEKVs}" CanUserAddRows="False" AutoGenerateColumns="False" RowHeaderWidth="0" SelectionUnit="Cell" HorizontalContentAlignment="Stretch" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible"> 
       <DataGrid.Columns> 
       <DataGridTemplateColumn Header="1"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Width="{Binding ActualWidth, ElementName=IndicatorTbl}" Text="{Binding Indicator, Mode=TwoWay}" TextWrapping="Wrap"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="2"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Width="{Binding ActualWidth, ElementName=KEKVTbl}" Text="{Binding Name, Mode=TwoWay}" TextWrapping="WrapWithOverflow"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="3"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Width="{Binding ActualWidth, ElementName=RowCodeTbl}" Text="{Binding RowCode, Mode=TwoWay}" TextWrapping="WrapWithOverflow"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="4"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <customControlls:NumericTextBox Style="{StaticResource NumericTextboxStyle}" Width="{Binding ActualWidth, ElementName=AccRecAtTheBeginingTbl}" Text="{Binding AccountsReceivable.AtTheBeginingOfTheYear, UpdateSourceTrigger=LostFocus}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="5"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <customControlls:NumericTextBox Style="{StaticResource NumericTextboxStyle}" Width="{Binding ActualWidth, ElementName=AccRecAtTheEndTbl}" Text="{Binding AccountsReceivable.AtTheEndOfTheReportingPeriod, Mode=TwoWay}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="6"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <customControlls:NumericTextBox Style="{StaticResource NumericTextboxStyle}" Width="{Binding ActualWidth, ElementName=AccRecOverdueTbl}" Text="{Binding AccountsReceivable.OverdueAtTheEndOfTheReportingPeriod, Mode=TwoWay}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="6"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <customControlls:NumericTextBox Style="{StaticResource NumericTextboxStyle}" Width="{Binding ActualWidth, ElementName=AccRecWrittenOffTbl}" Text="{Binding AccountsReceivable.WrittenOffSinceTheBeginningOfTheYear, Mode=TwoWay}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       </DataGrid.Columns> 
      </DataGrid> 
    </Grid> 
</Grid> 

これは、ユーザーコントロールは、ScrollViewerの削除

<Window x:Class="Treasury7MD.MainWindow" 
    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="MainWindow" WindowState="Maximized"> 
<Grid> 

    <Grid Name="g" > 
     <Grid.RowDefinitions> 
      <RowDefinition MaxHeight="20"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
      <RowDefinition Name="x" Height="*" MinHeight="100"></RowDefinition> 

     </Grid.RowDefinitions> 
     <Button Content="Collapse" Click="Button_Click"></Button> 
     <views:OrganizationInfoView x:Name="z" Grid.Row="1"></views:OrganizationInfoView> 
     <ScrollViewer Grid.Row="2" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" > 

       <views:Form7MDTableHeadeView Grid.Row="2" ></views:Form7MDTableHeadeView> 

     </ScrollViewer> 
    </Grid> 
    </Grid> 

+0

簡単な解決策として、スクロールビューア内にDataGridを置くことができます – tym32167

+0

これはDOMのレイアウト上の問題のようです。 DataGridが*高さのグリッドにあると言うと、その親グリッドは偶然StackPanelの子ですか?固定サイズを定義する必要はありませんが、レイアウトがDataGridテンプレートに組み込まれている埋め込みスクロールビューアを呼び出すために必要な境界を提供していないように思えます。 –

+0

ScrollViewerは同じ結果を返します。 –

答えて

0

を置かれている図であるUseControl周りを包み、DataGridのスクロールバーは、意図したとおりに働いていました。

関連する問題