WPF Style Setter * Высота и ширина - PullRequest
5 голосов
/ 01 апреля 2009

Я пытаюсь создать приложение 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 ]

10 голосов
/ 01 апреля 2009

Определение столбца сетки / определение строки определяют макет, и в пределах определенных областей вы должны добавить элементы управления, которые должны быть стилизованы (используя прикрепленные свойства, так как это может быть утомительным), поэтому старайтесь не стилизовать определения строк / определений столбцов.

Предметы для укладки:

Вы можете ввести элемент управления в строку / столбец следующим образом (извините, если я опекаю):

<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" будет иметь фиксированную высоту "500", а оставшееся пространство будет выделено для "rdRank1", который займет 60%, а "rdRank2" - 40%.

** Прилагаемые свойства: **

В вашем стиле:

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

Вы указываете, что любой элемент управления в элементе, к которому применяется этот стиль, имеет свойство Высота, которое должно принимать значение 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' позволяет вам задавать специфические для Type свойства и, как следствие, позволяет использовать звездные значения.

Надеюсь, это прояснит для вас несколько понятий.

0 голосов
/ 22 августа 2009

Размер звездочки строки или столбца работает только в том случае, если вы задаете ширину и высоту сетки. Если сетка автоматически изменяет размеры в зависимости от ее содержимого, то определение размера звезды не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...