有一个带有以下网格的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不同的面板可能更相关?
答案 0 :(得分:8)
Grid.RowDefinitions
和Grid.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>