WPF样式设定器*高度和宽度

时间:2009-04-01 00:17:31

标签: wpf styles

我正在尝试创建一个WPF应用程序,该应用程序由9x9网格组成,行和列使用不同的样式。我希望做的是为列和行定义的高度和宽度提供星形值。这似乎不适用于当前上下文。这是否可能,如果是这样,怎么样?

<Window x:Class="BaroqueChessUI.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="500" Width="500">
<Window.Resources>
    <Style x:Key="LightBackground" >
        <Setter Property="Control.Background" Value="Teal" />
    </Style>
    <Style x:Key="DarkBackground" >
        <Setter Property="Control.Background" Value="Maroon" />
    </Style>
    <Style x:Key="FileStyle">
        <Setter Property="Control.Width" Value="0.12" />
    </Style>
    <Style x:Key="RankStyle">
        <Setter Property="Control.Height" Value="0.12" />
    </Style>
    <Style x:Key="FileHeadingStyle">
        <Setter Property="Control.Width" Value="0.04" />
    </Style>
    <Style x:Key="RankHeadingStyle">
        <Setter Property="Control.Height" Value="0.04" />
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Name="rdRank" Style="{StaticResource FileHeadingStyle}" />
        <RowDefinition Name="rdRank1" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank2" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank3" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank4" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank5" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank6" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank7" Style="{StaticResource FileStyle}" />
        <RowDefinition Name="rdRank8" Style="{StaticResource FileStyle}" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Name="cdFile" Style="{StaticResource RankHeadingStyle}" />
        <ColumnDefinition Name="cdFile2" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile3" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile4" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile5" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile6" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile7" Style="{StaticResource RankStyle}" />
        <ColumnDefinition Name="cdFile8" Style="{StaticResource RankStyle}" />
    </Grid.ColumnDefinitions>
</Grid>

2 个答案:

答案 0 :(得分:10)

网格列定义/行定义定义布局,并且在定义的区域内,您应该添加应该设置样式的控件(使用附加的属性,因为您可能会变得乏味),因此请尝试不设置rowdefintions / columnsdefinitions本身的样式。 / p>

样式项目:

您可以将控件输入到行/列中(对不起,如果我是光顾):

<Rectangle Grid.Row="0" Grid.Column="0" ></Rectangle>

然后在行/列中的控件上定义样式。

<Rectangle Grid.Row="0" Grid.Column="0" Style="{StaticResource DarkBackground}"></Rectangle>

调整大小(星级值):

注意:网格将动态填充可用区域作为代码,如果您为网格定义固定高度和宽度并希望按比例分配剩余空间,则只需应用星值。

换句话说......关于实现“明星价值”:

  

我希望做的是提供一个   高度和宽度的星值   列和行定义。

为什么不直接在定义中输入这样的值?:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Name="rdRank" Height="500" />
            <RowDefinition Name="rdRank1" Height="60*" />
            <RowDefinition Name="rdRank2" Style="40*" />
        </Grid.RowDefinitions>
     </Grid>

在此示例中,名为“rdRank”的rowdefinition将具有固定高度“500”,剩余空间将分配给“rdRank1”,这将占用60%,“rdRank2”占40%。

**附属物:**

以你的风格:

    <Style x:Key="RankStyle">
        <Setter Property="Control.Height" Value="0.12" />
    </Style>

您正在声明应用此项目的项目中的任何控件,该项目具有名为Height的属性应取值0.12。 Control.Height最终会过滤掉。

如果您打算在行使用时达到0.12 *的高度:

    <Style x:Key="NewRankStyle" TargetType="{x:Type RowDefinition}">
        <Setter Property="Height" Value="0.12*" />
    </Style>

...

    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Name="rdRank"  Style="{StaticResource FileHeadingStyle}" />
        <RowDefinition Name="rdRank1" Style="{StaticResource NewRankStyle}" />

使用'TargetType'可以定位特定于类型的属性,因此允许使用星值。

希望这能为你解决一些概念。

答案 1 :(得分:0)

只有在为网格指定宽度和高度时,行或列星形大小才有效。如果网格根据其内容自动调整大小,则星号调整不起作用。