2009-04-01 12 views
4

私は、さまざまなスタイルを使用して行と列を持つ9x9グリッドで構成されるWPFアプリケーションを作成しようとしています。私が望んでいることは、列と行の定義の高さと幅のスター値を提供することです。これは現状では機能していないようです。これも可能なのでしょうか?あれば、どうですか?WPFスタイルセッター*高さと幅

<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> 

答えて

10

グリッド列定義/行定義レイアウトを定義し、(あなたが退屈得ることができるされているような添付プロパティを使用して)定義された領域内にあなたがスタイルされなければならないコントロールを追加する必要があり、そうしない試します行定義/列定義自体をスタイリングする。

スタイリングアイテム:そうのようなあなたが行に制御を入力することができます

/列(申し訳ありませんが私が愛用していた場合):次に

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

内のコントロールのスタイルを定義します行/列。

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

サイジング(スター値):

注:あなたのコードが立って、あなたは一定の高さを定義する場合にのみ、スター値を適用する必要がありますようグリッドを動的に使用可能な領域を埋めることグリッドに幅を割り当て、残りのスペースを比例配分したい。

つまり

...「スター値」を達成することに関して:

私は何を望んでいることは 列と行の定義の高さと幅のため スターの価値を提供しています。ただ「rdRank」という名前rowdefinitionは「500」の固定の高さを持っているでしょう。この例では

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

?:ので、あなたの定義に似た値を入力し、残りのスペースはないのはなぜ

う「rdRank1」には60%、「rdRank2」には40%が割り当てられます。

**添付プロパティ:**あなたのスタイルで

:あなたはこのスタイルがそれに適用される項目内の任意のコントロールを述べている

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

は、の値をとるべき高さと呼ばれる性質を持っています0.12。 Control.Heightはフィルタリングされ、話すようになります。

あなたが行の使用に* 0.12の高さを達成することを目指している場合:「TargetTypeに」を使用して

<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}" /> 

あなたはタイプ固有のプロパティをターゲットとしてすることができます結果はスター値を使用することができます。

これは、あなたのためにいくつかの概念をクリアします。

0

グリッドに幅と高さを指定した場合にのみ、行または列の星のサイジングが機能します。グリッドがその内容に基づいて自動サイズ設定されている場合、星のサイジングは機能しません。