2012-05-11 4 views
2

Появилась моя DataGrid с данными вне визуальной области. Я просмотрел несколько похожих вопросов по StackOverflow, но ни один из них, похоже, не решил мою проблему. Я не могу понять, что я делаю неправильно. Это то, что мой XAML выглядит следующим образом:Горизонтальная полоса прокрутки, не отображающаяся в DataGrid

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions>   
    <TextBlock HorizontalAlignment="Left" Foreground="{DynamicResource TitleFontColor}" 
    TextWrapping="Wrap" Text="{Binding WindowTitle}" VerticalAlignment="Center" 
    Margin="10,10,0,10" FontSize="18.667" FontFamily="Segoe UI" /> 
    <Border Background="{DynamicResource pnlworkarea}" 
     Grid.Row="1" CornerRadius="2" BorderThickness="1"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="65"/> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Border BorderThickness="1" 
     Background="{DynamicResource Brush_HeaderNew}" 
     BorderBrush="{DynamicResource pnlworkareastroke}" 
     CornerRadius="2" Margin="5"> 
     <Grid Margin="0"> 
       <ListBox ItemsSource="{Binding ViewMenuItems}" SelectedItem="{Binding Viewselected}" 
       VerticalAlignment="Center" Style="{DynamicResource Content_Header_ListBoxStyle}" 
     ItemTemplate="{DynamicResource Header_DataTemplate}" 
     ItemContainerStyle="{DynamicResource ContentHeader_ListBoxItemStyle}"    
     ItemsPanel="{DynamicResource Header_ItemsPanelTemplate}" HorizontalAlignment="Left"/>         
    </Grid> 
    </Border> 
    <Grid Grid.Row="1" Margin="5"> 
      <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Top" Margin="10,0,0,0"> 
        <ContentControl Focusable="False" Content="ContentControl" 
     Background="{DynamicResource Brush_VectorIcon}" 
     Template="{DynamicResource vector_Summary}" 
     Height="16" Margin="0,5,0,0"/> 
     <TextBlock TextWrapping="Wrap" Text="{Binding SearchDisplayMessage}" Margin="5,3,0,0" VerticalAlignment="Center"/> 
      </StackPanel> 
     </Grid> 
     <Grid Grid.Row="2" Margin="5"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <DataGrid x:Name="dataGrid" 
        commands:ControlEvents.GridViewSelectionChangedEventCommand="{Binding SelectionItemsChangeCommand}" 
        SelectionMode="Single" 
        AutoGenerateColumns="True"      
        Margin="0,5" Grid.Row="1" IsReadOnly="True" 
        ItemsSource="{Binding GridItem, Mode=TwoWay}" SelectedItem="{Binding SelectedItem}" 
        AlternatingRowBackground="#FFF5F4F8" Background="White" Grid.ColumnSpan="2" 
        ScrollViewer.CanContentScroll="True" 
        ScrollViewer.HorizontalScrollBarVisibility="Auto" 
        ScrollViewer.VerticalScrollBarVisibility="Auto"> 
        <i:Interaction.Behaviors> 
         <Behaviors:SelectorDoubleClickCommandBehavior Command="{Binding GridDoubleclickcommand}"/> 
        </i:Interaction.Behaviors> 

       </DataGrid> 
      </Grid> 

     </Grid> 

    </Border> 

</Grid> 

Просто добавить, что DataGrid здесь не фактический DataGrid я использую. My Custom DataGrid получен из DataGrid. Но я тоже пробовал это с обычным DataGrid, но, похоже, тоже не работает.

ответ

1

у вас есть высота Авто

<Grid Grid.Row="2" Margin="5"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <DataGrid x:Name="dataGrid" 
        SelectionMode="Single" 
        AutoGenerateColumns="True"      
        Margin="0,5" Grid.Row="1" IsReadOnly="True" 
        ItemsSource="{Binding GridItem, Mode=TwoWay}" SelectedItem="{Binding SelectedItem}" 
        AlternatingRowBackground="#FFF5F4F8" Background="White" Grid.ColumnSpan="2" 
        ScrollViewer.CanContentScroll="True" 
        ScrollViewer.HorizontalScrollBarVisibility="Auto" 
        ScrollViewer.VerticalScrollBarVisibility="Auto"> 
       </DataGrid> 
      </Grid> 

Изменение к

<DataGrid Grid.Row="2" x:Name="dataGrid" 
        SelectionMode="Single" 
        AutoGenerateColumns="True"      
        Margin="0,5" Grid.Row="1" IsReadOnly="True" 
        ItemsSource="{Binding GridItem, Mode=TwoWay}" SelectedItem="{Binding SelectedItem}" 
        AlternatingRowBackground="#FFF5F4F8" Background="White" Grid.ColumnSpan="2" 
        ScrollViewer.CanContentScroll="True" 
        ScrollViewer.HorizontalScrollBarVisibility="Auto" 
        ScrollViewer.VerticalScrollBarVisibility="Auto"> 
       </DataGrid> 
+0

Я сделал это так, как было предложено, но, похоже, полоса прокрутки не появляется, даже если я установил ее в Visible. Я даже попытался поместить DataGrid внутри ScrollViewer, но в этом случае DataGrid выходит за рамки воображения. Я не против использовать DataGrid внутри ScrollViewer, если есть способ ограничить ширину столбцов DataGrid, позволяя каждому столбцу растягиваться до максимального значения содержащихся в нем данных. –

+0

«The Scrollbar - который? Я не следую. Можете ли вы воспроизвести проблему в небольшом примере кода? – Paparazzi

+0

Я установил ScrollViewer.HorizontalScrollBarVisibility = "Visible". Но это не помогает. Я очень короткая. Итак, в качестве обходного пути я поместил datagrid в ScrollViewer и в загруженное событие DataGrid, я изменяю размер столбцов на основе размера содержимого в каждом. Теперь проблема заключается в том, что мне нужно установить MinWidth для каждого столбца, который они слишком сильно сжимают, если данных мало. –

1

Я не могу угадать, что вы делаете неправильно, как наиболее масштабируется версия dopwn вашего кода показывает горизонтальную полосу прокрутки для меня ...

<UserControl.Resources> 
    <x:ArrayExtension x:Key="MyArray" Type="{x:Type TextBlock}"> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test1" Text="12345678" 
        DataContext="12345678" Tag="12345689"/> 
     <TextBlock Name="Test2" Text="12345678" 
        DataContext="12345678" Tag="12345689"/>    
    </x:ArrayExtension> 
</UserControl.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock HorizontalAlignment="Left" 
       TextWrapping="Wrap" 
       Text="My Text Clock" 
       VerticalAlignment="Center" 
       Margin="10,10,0,10" FontSize="18.667" 
       FontFamily="Segoe UI" /> 
    <Border Grid.Row="1" CornerRadius="2" BorderThickness="1"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="65"/> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Border BorderThickness="1" 
       CornerRadius="2" Margin="5"> 
       <Grid Margin="0"> 
         <ListBox 
          ItemsSource="{Binding 
           ViewMenuItems}"        
          VerticalAlignment="Center" 
          HorizontalAlignment="Left"/>    
    </Grid> 
    </Border> 
    <Grid Grid.Row="1" Margin="5"> 
      <StackPanel HorizontalAlignment="Left" 
         Orientation="Horizontal" 
         VerticalAlignment="Top" Margin="10,0,0,0"> 
        <ContentControl Focusable="False" 
            Content="ContentControl" 
            Height="16" Margin="0,5,0,0"/> 
        <TextBlock TextWrapping="Wrap" 
           Text="DisplayHerePlz!" 
           Margin="5,3,0,0" 
           VerticalAlignment="Center"/> 
       </StackPanel> 
    </Grid> 
     <Grid Grid.Row="2" Margin="5"> 
      <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
    <tk:DataGrid x:Name="dataGrid" 
      SelectionMode="Single" 
     AutoGenerateColumns="True" 
       Margin="0,5" Grid.Row="1" 
      IsReadOnly="True" 
      ItemsSource="{StaticResource MyArray}" 
      ScrollViewer.CanContentScroll="True" 
      ScrollViewer.HorizontalScrollBarVisibility="Auto" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
     AlternatingRowBackground="#FFF5F4F8" 
      Background="White" 
      Grid.ColumnSpan="2">       
     </tk:DataGrid> 
    </Grid> 
    </Grid> 
    </Border> 
</Grid> 

Его, вероятно, другие биты, которые я опущенные, которые могут быть вызывая горизонтальную ширину, чтобы растянуть за пределы точки зрения прокрутки ...

+0

Спасибо, что приложили усилия. Просто хотел знать, есть ли что-то очевидное, что я пропал без вести. Я не могу разобраться в попытках найти различные решения относительно того, что, по-видимому, является проблемой. –

0

Здесь несколько вещей, которые вы должны иметь в виду, присваивают свойство width datagrid. определите, что ваши столбцы дают ширину последнего столбца как автоматически, а также назначают некоторый minWidth.

  <DataGrid VerticalAlignment="Top" Margin="0,0,0,0" Height="221" HorizontalAlignment="Left" Width="234" 
       DataContext="{DynamicResource ItemCollectionViewSource}" 
         ItemsSource="{Binding}" AutoGenerateColumns="False" IsReadOnly="True" 
         ScrollViewer.CanContentScroll="True" 
         ScrollViewer.VerticalScrollBarVisibility="Auto" 
         ScrollViewer.HorizontalScrollBarVisibility="Auto" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding ID}" Header="ID"/> 
        <DataGridTextColumn Binding="{Binding URL}" Header="URL" Width="Auto" MinWidth="186"/> 
       </DataGrid.Columns> 
      </DataGrid> 
4

У меня была аналогичная проблема с горизонтальной полосой прокрутки, которая не отображается. У меня была колонка шириной «*». Как только я удалил это, появилась полоса прокрутки. Я думаю, если бы вы установили ширину в фиксированную с ней, также появится.

+0

Это сработало для меня (я фактически изменил его с * на «Авто», хотя). Я считаю, что полоса прокрутки автоматически показывает, если поле работает * вне сетки *, однако, если столбец имеет размер до точного размера сетки, он технически не запускается из сетки/запускает полосу прокрутки для отображения. – iliketocode

Смежные вопросы