为什么我的模块不能填充Shell.xaml中的完整DockPanel?

时间:2009-07-29 11:39:57

标签: wpf xaml prism dockpanel

在我的Shell.xaml中,我想要两个模块,每个模块占用一半的高度并且可以扩展。为什么第一个模块被切断了?

alt text

贝壳:

<Window x:Class="HelloWorld.Desktop.Shell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cal="http://www.codeplex.com/CompositeWPF"
        Height="300"
        Width="300"
        Title="Hello World" >

    <DockPanel LastChildFill="True">
        <ContentControl Name="MainRegion" 
                        DockPanel.Dock="Top"
                 cal:RegionManager.RegionName="MainRegion"/>
        <ContentControl 
            Name="SecondRegion" 
            DockPanel.Dock="Top"
            cal:RegionManager.RegionName="SecondRegion"/>
    </DockPanel>
</Window>

HelloWorldView:

<UserControl x:Class="HelloWorldModule.Views.HelloWorldView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel
            Background="Tan">
        <TextBlock Text="Hello World View"
                   Foreground="Brown"
                   Margin="10 10 10 0"
                   FontSize="14"/>

        <TextBlock Name="DisplayArea" 
                 Margin="10 10 10 0" Text="(default text)" TextWrapping="Wrap"/>
    </StackPanel>
</UserControl>

SecondView:

<UserControl x:Class="SecondModule.Views.SecondView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel
            Background="Orange">
        <TextBlock Text="Second View"
                   Foreground="Brown"
                   Margin="10 10 10 0"
                   FontSize="14"/>

        <TextBox Name="Message" 
                 Margin="10 10 10 0" Text="skfddsf" TextChanged="TextBox_TextChanged"/>
    </StackPanel>
</UserControl>

2 个答案:

答案 0 :(得分:1)

请允许我回答这个问题。我使用了具有可变行高的网格并且它有效。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="5*"/>
        <RowDefinition Height="5*"/>
    </Grid.RowDefinitions>
    <ContentControl Name="MainRegion" 
                    Grid.Row="0"
             cal:RegionManager.RegionName="SecondRegion"/>
    <ContentControl 
        Name="SecondRegion" 
                    Grid.Row="1"
        cal:RegionManager.RegionName="MainRegion"/>
</Grid>

奇怪的是, StackPanel DockPanel 不会自动平均分配他们的空间。

答案 1 :(得分:0)

StackPanel不会拉伸其子节点来填充可用空间(这是一个功能)。

如果您使用LastChildFill="true",DockPanel会拉伸。