在资源中按样式指定Grid列和行定义

时间:2013-07-29 11:09:00

标签: wpf xaml

有一个带有以下网格的UserControl:

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

现在我有一个窗口,我会写这样的东西:

<Window.Resources>
    <Style TargetType="Grid">
        <Setter Property="RowDefinitions">
            <Value>
                <RowDefinition Height="*"/>
                <RowDefinition/>
            </Value>
        </Setter>
    </Style>
</Window.Resources>

关键部分,无法编译是我想要将高度从自动更改为*。如何以合法的方式做到这一点?

总的来说,我必须要处理案件。 1)第一行应拉伸,第二行应固定。 2)反之亦然。也许与Grid不同的面板可能更相关?

2 个答案:

答案 0 :(得分:8)

Grid.RowDefinitionsGrid.ColumnDefinitions不是依赖项属性,因此无法通过样式设置。

您可以在UserControl中创建依赖项属性FirstRowHeight,并将第一个Height的{​​{1}}绑定到该属性。稍后您可以将RowDefinition属性设置为FirstRowHeight

Style

该属性如下所示:

<Grid.RowDefinitions>
    <RowDefinition Height="{Binding FirstRowHeight,
        RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/>
    <RowDefinition/>
</Grid.RowDefinitions>

编辑:为了支持您在问题结尾处描述的简单场景,您可能还有一个public static readonly DependencyProperty FirstRowHeightProperty = DependencyProperty.Register( "FirstRowHeight", typeof(GridLength), typeof(YourUserControl)); public GridLength FirstRowHeight { get { return (GridLength)GetValue(FirstRowHeightProperty); } set { SetValue(FirstRowHeightProperty, value); } } 依赖项属性,其属性已更改回调,用于设置代码中的行高:

IsFirstRowFixed

财产:

<Grid.RowDefinitions>
    <RowDefinition x:Name="row1" Height="*"/>
    <RowDefinition x:Name="row2" Height="Auto"/>
</Grid.RowDefinitions>

答案 1 :(得分:0)

XAML代码:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
<Grid Grid.Row="1" Style="{StaticResource HeaderHeight}"</>
<Grid Grid.Row="1" Style="{StaticResource FooterHeight}"</>
</>

资源字典中的样式

<Style TargetType="Frame" x:Name="HeaderHeight">
    <Setter Property="Height" Value="700"></Setter>
</Style>
<Style TargetType="Grid" x:Name="FooterHeight">
    <Setter Property="Height" Value="70"></Setter>
</Style>