как заставить мой массив данных расти вместе с окном и поддерживать поля? - PullRequest
5 голосов
/ 24 декабря 2011

Все в моем макете будет изменяться с изменением размера главного окна. Проблема, с которой я сталкиваюсь, заключается в том, что, как вы можете видеть, сетка данных исчезает с экрана. Если вы максимизируете окно, размер сетки данных изменится вместе с окном, но продолжит исчезать с экрана. Как мне заставить его поддерживать маржу в 20 с его родительской сеткой?

<Grid>
    <StackPanel Orientation="Vertical">
        <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20"/>
        <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" Margin="20,0,0,0" Width="75" Click="btnRun_Click" />

        <Grid>
            <my:DataGrid Name="dgResults" VerticalAlignment="Top" Margin="20" />
        </Grid>
    </StackPanel>
</Grid>

enter image description here

UPDATE: Просто чтобы быть более конкретным. Эффект, который я пытаюсь достичь, вот что:

Когда окно загружается в первый раз, вы видите пустую сетку данных, поэтому ее высота составляет всего около 15 пикселей. Когда вы запустите запрос, он заполнит сетку данных путем переназначения источника элементов. На данный момент, когда вы делаете это, если данные превышают размер окна, они уходят из нижней части экрана. Мне нужно только развернуть до нижней части окна, а затем включить полосу прокрутки. Я могу сделать это, просто завернув его в просмотрщик. Однако при изменении размеров окна сетка данных должна изменить его размер.

Мне интересно, может ли установка быть с этим связана? Форма фактически является страницей wpf, отображаемой во фрейме.

UPDATE:

<Page x:Class="Hold_Database___Prototype_1.Views.SQL"
      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="304" d:DesignWidth="732"
    Title="SQL" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" AllowDrop="True">
        <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="23" />
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
            <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20" Grid.Row="0"/>
            <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" 
                    Margin="20,0,0,0" Width="75" Grid.Row="1" Click="btnRun_Click" />
        <DockPanel Grid.Row="2">
            <my:DataGrid Name="dgResults" Margin="20" />
        </DockPanel>
    </Grid>
</Page>

Ответы [ 3 ]

3 голосов
/ 24 декабря 2011

Для чего нужна док-панель в этом примере?

Попробуйте поместить DataGrid непосредственно в ячейку без стековой панели. Если вы устанавливаете высоту кнопки, установите для сетки значение auto.

Кроме того, зачем так много места для текста?

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
        <TextBox Height="170" Name="txtSQL" VerticalAlignment="Top" AcceptsReturn="True" TextWrapping="Wrap" Margin="20" Grid.Row="0"/>
        <Button Content="Run!" Height="23" HorizontalAlignment="Left" Name="btnRun" VerticalAlignment="Top" 
                Margin="20,0,0,0" Width="75" Grid.Row="1" Click="btnRun_Click" />
        <my:DataGrid  Grid.Row="2" <my:DataGrid Name="dgResults" Margin="20" /> 

Затем также установите HorizontalAlignment, VerticleAlignment, HorizontalContentAlignment и VerticalContentAlignment = stretch

2 голосов
/ 24 декабря 2011

Ваш Grid отображается вне экрана без полосы прокрутки, потому что вы используете StackPanel.Необходимо соблюдать осторожность при использовании StackPanel - это самый упрощенный из всех производных классов WPF Panel, поскольку его MeasureOverride вызывает Measure для всех его дочерних элементов с размером double.PositiveInifity независимо от того, сколько местаПанель на самом деле есть в наличии.Даже ScrollViewer не поможет вам с StackPanel (будет отображаться ScrollBar, но вы не сможете его переместить).

Например, рассмотрим Window 350по высоте и ширине, а также один Button в качестве содержимого, равный 500 по высоте и ширине:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="350">
    <StackPanel>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Button Content="Hello" Height="500" Width="500" />
        </ScrollViewer>
    </StackPanel>
</Window>

Как и в вашем примере, Button здесь выводится за пределы экрана в обоих вертикальныхи горизонтальные направления и нефункциональная полоса прокрутки будут присутствовать.Если мы изменим панель на размер, который учитывает размер ее заданной области (например, DockPanel):

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel>
        <ScrollViewer>
            <Button Content="Hello" Height="500" />
        </ScrollViewer>
    </DockPanel>
</Window>

, то появятся полосы прокрутки, которые работают и, следовательно, позволяют показывать содержимое вне экрана при прокрутке..

Надеюсь, это поможет!

0 голосов
/ 24 декабря 2011

Что я сделал, так это определил горизонтальное и вертикальное выравнивание для «Растянуть» соответственно в элементе управления, который вы хотите (вашей DataGrid), чтобы получить размер на основе изменяемого размера окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...