我有一个PRISM v5应用程序,这给我带来了一些麻烦。
我的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'
但它不起作用,因为我收到此错误消息:
ItemsControl
在进行新搜索之前,我甚至在Google上搜索了第4页 - 我真的非常渴望能够在垂直方向上扩展它。
更新1:
所以我将其中一个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);
我是这样做的:
ContentControl
现在看起来像这样:
仍未伸展到页面底部。
更新2:
结果 <Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="50"/>
<RowDefinition />
</Grid.RowDefinitions>
就是答案。
但你不能有一个未指定的高度。我有以下内容:
Height
更改第二个RowDefinition
的{{1}}会产生想要的结果。但现在我需要知道它必须有多高,因为它不会扩展。
所以我在其他地方寻找解决方案。 有人(某处,我不记得在哪里)说这可能会有所作为:
<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();
}
}
但是,如果InvalidCastException
(Visivility)value
,我就无法加载应用程序
任何人都知道如何动态地查看窗户应该有多高?
答案 0 :(得分:0)
ItemsControl
被垂直拉伸,但您的观看次数被添加为ItemsControl
中的项目。
改为使用ContentControl
代替您的地区。
答案 1 :(得分:0)
尝试将网格行定义为拉伸,如下所示:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="50"/>
<RowDefinition Height="*" MinHeight="50" />
</Grid.RowDefinitions>