2015-12-03 5 views
0

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

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

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

See: Window screenshot

код:

<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

+1

Не могли бы вы добавить код? –

+0

Добавил код на вопрос, проигнорировал пространства имен, я их изменил, чтобы я мог загрузить код –

+0

Не могли бы вы попытаться использовать 'VerticalAlignment =" Top "' на корневом элементе 'Grid' –

ответ

0

Прежде всего, значение 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))%.

+0

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

0

Не используйте

SizeToContent = "WidthAndHeight"

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

Или

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

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