WPF xamdatagrid высота + размер окна для содержимого

У меня есть окно с SizeToContent = "WidthAndHeight", местоположение запуска устанавливается вручную. Это окно содержит одну сетку из двух строк: первая с высотой "1*", а вторая с автоматической высотой. Первая строка содержит xamdatagrid (инфрагистика), а вторая содержит кнопки OkCancel.

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

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

Смотрите: Скриншот окна

код:

<Window x:Class="CopyRenameLineItems.CopyAndRename"
         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"
         xmlns:igDP="http://infragistics.com/DataPresenter"
         x:Name="CopyWindow" Title="Copy/Rename Line Item"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="500"
         d:DataContext="{d:DesignInstance d:Type=copyRenameLineItems:CopyAndRenameViewModel}" SizeToContent="WidthAndHeight" >

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Grid Margin="7" Name="MainGrid">

    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <igDP:XamDataGrid Name="CopyRenameGrid" Margin="5" GroupByAreaLocation="None" DataSource="{Binding Rows,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                            AutoFit="True" RecordContainerGenerationMode="PreLoad" >
            <igDP:XamDataGrid.FieldSettings>
                <igDP:FieldSettings
                    CellValuePresenterStyle="{StaticResource CellsBorder}"
                    AutoSizeOptions="All"
                AllowEdit="True"   
                AllowRecordFiltering="True"
                FilterLabelIconDropDownType ="MultiSelectExcelStyle" 
                CellClickAction="EnterEditModeIfAllowed"/>
            </igDP:XamDataGrid.FieldSettings>
            <igDP:XamDataGrid.FieldLayoutSettings>
                <igDP:FieldLayoutSettings 
                    AllowClipboardOperations="All"                                
                    AutoGenerateFields="False"
                    AutoFitMode="Never"
                    FilterRecordLocation="OnTop"                                
                    FilterUIType="LabelIcons"  />
            </igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:XamDataGrid.FieldLayouts>
                <igDP:FieldLayout>
                    <igDP:FieldLayout.Fields>
                        <igDP:Field Name="Copy" >
                            <igDP:Field.Settings>
                                <igDP:FieldSettings Width="Auto" LabelPresenterStyle="{StaticResource CopyHeader}" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:Field Name="Name" Label="Name"">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings AllowEdit="False" Width="Auto" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:Field Name="Description" Label="Description">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings AllowEdit="False" Width="Auto"/>
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:Field Name="NewName" Label="New name" Width="200">
                        </igDP:Field>
                    </igDP:FieldLayout.Fields>
                </igDP:FieldLayout>
            </igDP:XamDataGrid.FieldLayouts>
        </igDP:XamDataGrid>

    </Grid>

    <Grid Grid.Row="1" Margin="0,7,0,0" VerticalAlignment="Bottom">
        <Grid.ColumnDefinitions >
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0">
            <Button Height="25" Width="45" HorizontalAlignment="Right" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
                    Content="OK" Command="{Binding CopyRenameWindowOkButtonClick}" CommandParameter="{Binding ElementName=CopyWindow}" Margin="0,0,15,0"/>
        </Grid>
        <Grid Grid.Column ="1">
            <Button Height="25" Width="45" HorizontalAlignment="Right" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Cancel" Command="{Binding  CloseWindowCancelButtonClick}"
                CommandParameter="{Binding ElementName=CopyWindow}"/>

        </Grid>
    </Grid>


</Grid>
</Window>

Спасибо,

Zehavit

2 ответа

Прежде всего, значение 1* ничего не значит с SizeToContent = "WidthAndHeight". Если вы измените "1*" на "Авто", у вас будет такое же поведение. Вы должны удалить SizeToContent = "WidthAndHeight" и сделать это:

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="3*"/>
        <RowDefinition Height="1*"/>

    </Grid.RowDefinitions>
    <Grid>
        your list ..
    </Grid>
    <Grid Grid.Row="1">
        you buttons ..
    </Grid>
</Grid>

Ваша первая строка (список) будет (3/(3+1))% от размера окна

Второй (1/(3+1))%.

Не использовать

SizeToContent="WidthAndHeight"

в одиночку, потому что это установит size из Window как его содержание. И ваш XamDataGrid имеет много records так Window вырастет до очень большого размера. вместо этого просто удалите это свойство, то content будет скорректирована в соответствии с Window,

Или же

отдай свое Window немного Height сначала (как ни старайся binding Height вашей Window в System.Windows.SystemParameters.PrimaryScreenHeight) тогда вы можете использовать SizeToContent а также Window не будет расти бесконечно. Также Grid высота строки не имеет значения, потому что вы не дали никаких фиксированных Height любому control или же Grid,

Это решает проблему.

Другие вопросы по тегам