У меня есть приложение 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>
Когда я запускаю их и вставить взгляды с неустановленными высотами, они не будут заполнять все доступное пространство. Но они заполняют пространство по горизонтали (ширина), как показано ниже:
Я видел так много предложений этого:
<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);
Теперь выглядит следующим образом:
Еще не протягивать к нижней части страницы.
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
Кто-нибудь знает, как динамически видеть, насколько высокими должны быть окна?
Какова содержание взглядов? Некоторые элементы управления просто не растянутся. Лучшим примером является Stackpanel. В вертикальной ориентации он не будет растягиваться за минимальное вертикальное пространство, требуемое его детьми. – Gusdor
Я использую '' Grid'' с цветом фона, установленным на зеленый, и один с красным. @Gusdor –
Возможный дубликат [Как сделать растяжку ItemsControl для заполнения всего доступного пространства?] (Http://stackoverflow.com/questions/36653047/how-do-i-make-an-itemscontrol-stretch-to-fill-all-availible-space) – SpeziFish