2015-09-17 2 views
0

У меня есть приложение PRISM v5, которое вызывает у меня некоторые проблемы.ItemsControl не растягивается вертикально

У меня есть три ItemsControls в моих UserControl «ы Grid:

<Grid VerticalAlignment="Stretch"> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="3*"/> 
     <ColumnDefinition Width="1*" MinWidth="50"/> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" MinHeight="50"/> 
     <RowDefinition MinHeight="50" /> 
    </Grid.RowDefinitions> 

    <!--Header region--> 
    <ItemsControl 
     Grid.Row="0" 
     Grid.Column="0" 
     Grid.ColumnSpan="2" 
     regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.HeaderRegion}"/> 

    <!--Main region--> 
    <ItemsControl 
     Grid.Row="1" 
     Grid.Column="0" 
     regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.MainRegion}"> 
    </ItemsControl> 

    <!--Menu region--> 
    <ItemsControl 
     Background="DarkGoldenrod" 
     Grid.Row="1" 
     Grid.Column="1" 
     regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.MenuRegion}"> 
    </ItemsControl> 

Когда я запускаю их и вставить взгляды с неустановленными высотами, они не будут заполнять все доступное пространство. Но они заполняют пространство по горизонтали (ширина), как показано ниже:

Prism project not stretching[1]

Я видел так много предложений этого:

<ItemsControl 
     Grid.Row="1" 
     Grid.Column="0" 
     regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.MainRegion}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid></Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Но это не работает, потому что я получаю это сообщение об ошибке:

System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='SecondView' 
System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='SecondView' 

Я даже искал Google на странице 4 перед тем, как делать новые поиски. Я действительно отчаянно нуждаюсь в чем-то, что может растяните его вертикально.

Update 1:

Так что я изменил один из ItemsControl к ContentControl:

<!--Header region--> 
<ItemsControl 
    Grid.Row="0" 
    Grid.Column="0" 
    regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.HeaderRegion}"/> 

<!--Main region--> 
<ContentControl 
    Grid.Row="1" 
    Grid.Column="0" 
    VerticalAlignment="Stretch" 
    VerticalContentAlignment="Stretch" 
    regions:RegionManager.RegionName="{x:Static infrastructure:RegionNames.MainRegion}"/> 

я загрузить мой SecondView в ContentControl, который является UserControl следующим содержание:

<Grid 
    Background="IndianRed" 
    VerticalAlignment="Stretch" 
    HorizontalAlignment="Stretch" 
    MinHeight="200" 
    MinWidth="200"/> 

я так так:

var obj = _container.Resolve<SecondView>(); 
var region = _manager.Regions[RegionNames.MainRegion]; 
region.Add(obj); 

Теперь выглядит следующим образом:

Edit 1[2]

Еще не протягивать к нижней части страницы.

Update 2: И получится ContentControl ответ на это. Но вы не можете иметь неуказанную высоту. У меня было следующее:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto" MinHeight="50"/> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

Изменение Height для второго RowDefinition дает желаемого результата. Но теперь мне нужно знать, насколько он высок, потому что он не будет масштабироваться.

Так что я искал другие места для решения. Кто-то (где-то, я не помню, где) сказал, что это может сделать трюк:

<Grid.Resources> 
    <resources:VisibilityToStarHeightConverter x:Key="VisibilityToStarHeightConverter"/> 
</Grid.Resources> 

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" MinHeight="50" /> 
    <RowDefinition Height="{Binding Converter={StaticResource VisibilityToStarHeightConverter}, ConverterParameter=5}" /> 
</Grid.RowDefinitions> 

Связывание его к классу, как это:

public class VisibilityToStarHeightConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if ((Visibility)value == Visibility.Collapsed) 
     { 
      return new GridLength(0, GridUnitType.Star); 
     } 
     else 
     { 
      if (parameter == null) 
      { 
       throw new ArgumentNullException("parameter"); 
      } 

      return new GridLength(double.Parse(parameter.ToString(), culture), GridUnitType.Star); 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Но я не могу загрузить приложение, не получая a InvalidCastException на (Visivility)value

Кто-нибудь знает, как динамически видеть, насколько высокими должны быть окна?

+0

Какова содержание взглядов? Некоторые элементы управления просто не растянутся. Лучшим примером является Stackpanel. В вертикальной ориентации он не будет растягиваться за минимальное вертикальное пространство, требуемое его детьми. – Gusdor

+0

Я использую '' Grid'' с цветом фона, установленным на зеленый, и один с красным. @Gusdor –

+0

Возможный дубликат [Как сделать растяжку ItemsControl для заполнения всего доступного пространства?] (Http://stackoverflow.com/questions/36653047/how-do-i-make-an-itemscontrol-stretch-to-fill-all-availible-space) – SpeziFish

ответ

0

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

Используйте вместо этого ContentControl для своих регионов.

+0

Это будет хлопот, чтобы исправить (есть нечто большее, чем просто), но я дам ему выстрел и отчет. –

+0

Он по-прежнему не работает с ContentControl. Есть ли у вас больше предложений? –

+0

Позвольте мне забрать это обратно. Обнаружена ошибка в настройках моей высоты. –

0

Попробуйте определение вашей строки сетки, как растягиваются, как это:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" MinHeight="50"/> 
    <RowDefinition Height="*" MinHeight="50" /> 
</Grid.RowDefinitions> 
+0

Тот же результат, что и в обновлении 1. Попытайтесь увидеть мое обновление 2 –

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