Datagrid расширяет окно

#wpf #xaml #datagrid

#wpf #xaml #datagrid

Вопрос:

Всем привет. У меня проблема с datagrid в моем окне. Я хочу, чтобы он расширялся только до необходимого размера, если он не заполняет все окно или не показывает полосу прокрутки, если она занимает весь экран. Вот мой xaml

  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>

    <DataGrid Grid.Row="0" Name="dg">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Col1"/>
            <DataGridTextColumn Header="Col1"/>
        </DataGrid.Columns>            
    </DataGrid>

    <GroupBox Grid.Row="2" Margin="5">
        <Button>Click</Button>
    </GroupBox>
</Grid>
  

Если я установлю высоту строки для datagrid равной *, это расширит серый фон datagrid на всю строку. Но если я установлю высоту на auto, тогда не будет отображаться полоса прокрутки, когда в окне слишком много элементов.

Есть идеи?

Ответ №1:

Вы пробовали вложить DataGrid в ScrollViewer?

Комментарии:

1. Да, это тоже не дает желаемого результата. Он по-прежнему будет расширяться за пределы экрана с помощью RowHeight = auto и ведет себя очень похоже на просто datagrid, если RowHeight =*

2. После еще нескольких попыток, если я вложил сетку данных внутрь scrollviewer и stackpanel, я получил желаемые результаты. Можете ли вы указать это в своем ответе для других?

3. Основываясь на том, что я опубликовал ниже, я даже не уверен, что вам вообще нужен scrollviewer.

Ответ №2:

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

 <UserControl x:Class="ControlSandbox.StackOverflowQuestion"
         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" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="Root">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>

    <DataGrid Grid.Row="0" Name="dg" ItemsSource="{Binding Data}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Col1" Binding="{Binding Item1}" />
            <DataGridTextColumn Header="Col1" Binding="{Binding Item2}"/>
        </DataGrid.Columns>

    </DataGrid>

    <GroupBox Grid.Row="2" Margin="5">
        <Button>Click</Button>
    </GroupBox>
</Grid>
  

Я создал некоторые данные следующим образом:

 public partial class StackOverflowQuestion : UserControl
{
    public StackOverflowQuestion()
    {
        Data = new ObservableCollection<Tuple<string, string>>();
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));
        Data.Add(new Tuple<string, string>("test", "test"));

        InitializeComponent();

        Root.DataContext = this;


    }

    public ObservableCollection<Tuple<String, String>> Data {
        get;
        set;
    }
}
  

Результатом является правильно отредактированный элемент управления с полосой прокрутки:

введите описание изображения здесь

И в другом направлении:

введите описание изображения здесь

Если я не совсем неправильно понимаю ваш вопрос?

ОБНОВЛЕНИЕ: Добавлен снимок всего экрана:

введите описание изображения здесь

Комментарии:

1. Попробуйте, чтобы элементов было недостаточно для заполнения экрана, и скажите мне, видите ли вы фон datagrid или окна.

2. Обновлено с помощью полноэкранного снимка.

3. Да, это та же проблема, с которой я столкнулся. Серый фон сетки данных закрывал фон окна, которое я хотел видеть, до тех пор, пока в сетке данных не будет достаточно элементов, чтобы фактически заполнить экран. Я бы установил фон dg прозрачным, но у наших datagrids есть тень по границе. Это создало случайную тень, окружающую невидимый фон