ItemsControl不会垂直拉伸

时间:2015-09-17 12:09:45

标签: wpf prism itemscontrol stretch

我有一个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>

当我运行它们并插入具有未指定高度的视图时,它们将不会填充所有可用空间。 但是他们填写了水平空间(宽度),如下所示:

Prism project not stretching[1]

我已经看到了很多这样的建议:

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

现在看起来像这样:

Edit 1[2]

仍未伸展到页面底部。

更新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,我就无法加载应用程序

任何人都知道如何动态地查看窗户应该有多高?

2 个答案:

答案 0 :(得分:0)

ItemsControl被垂直拉伸,但您的观看次数被添加为ItemsControl中的项目。

改为使用ContentControl代替您的地区。

答案 1 :(得分:0)

尝试将网格行定义为拉伸,如下所示:

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