2016-12-20 2 views
0

Ich habe DataGrid innerhalb des UserControl. Datagrid ist mit 50 Elementen (50 Zeilen) an die ItemsSource gebunden. UserControl Breite und Höhe sind auf automatisch gesetzt. Wie kann ich ScrollBar aktivieren, ohne Höhe und Breite von DataGrid anzugeben? Vielleicht verpasse ich etwas, weil Designer mir zu diesem Zeitpunkt zeigt, dass meine DataGrid Height 5000 ist (basierend auf Auto-Berechnung), deshalb wird ScrollBar nicht angezeigt. Ich möchte, dass mein DataGrid in den Hauptfenstercontainer passt - Rasterzeile mit Sterngröße. Ich möchte keine festen Größen verwenden, da ich diese Ansicht bei verschiedenen Bildschirmauflösungen verwenden möchte.WPF DataGrid vertikale ScrollBar ist immer deaktiviert

<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> 

Dies ist Ansicht, in der Usercontrol

befindet
<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

Als einfache Lösung können Sie DataGrid in Scroll-Viewer setzen – tym32167

+0

Das klingt wie ein Layout-Problem höher in Ihrem DOM. Wenn Sie sagen, dass Sie das DataGrid in einem Raster von * height haben, ist dieses übergeordnete Raster zufällig das Kind eines StackPanels? Sie sollten keine festen Größen definieren müssen, aber es klingt, als ob Ihr Layout nicht die Grenzen bietet, die zum Aufrufen des eingebetteten Scrollviewer erforderlich sind, der in die DataGrid-Vorlage integriert ist. –

+0

ScrollViewer gibt das gleiche Ergebnis. –

Antwort

0

entfernt Scroll umschlungen UseControl und Datagrid ScrollBar wie beabsichtigt funktioniert.