2016-08-07 4 views
0

(単純に)(参考にしながら、潜在的にネストされた要素のグループをスタイルする方法XAML/WPFの親要素レベルのスタイルは1つだけです。その後、1つのスタイル参照を使用して(ネストされた)要素のスタイルを設定する方法

<div class="levels"><!--1st level; only reference to the style--> 
    <div><!--2nd level--> 
    <div></div><!--3rd level--> 
    </div> 
    <div></div><!--2nd level--> 
</div> 

とによって、それをスタイル::HTML/CSSで

それを行うことが可能である。これは、親に一度だけのスタイル「レベル」を参照することが可能になる

.levels { 
    width: 400px; height: 400px; 
    background-color:red;} 

.levels div { 
    width: 100px; height: 100px; 
    background-color:green;} 

.levels div div { 
    width: 50px; height: 50px; 
    background-color:yellow;} 

新しい要素に親要素(xamlまたは動的にコードのいずれか)の下に新しい要素が追加されたときに、新しい要素に「class = levelx」を追加する必要はありません素子。

XAML/WPFでも同じことができますか? BasedOnプロパティは、私が望むものではないようです:a)プロパティの継承を探していません。b)新しいスタイルに定義されたx:Keyがないかぎり、それは指定されたTargetTypeのすべての要素に適用され、そうであれば、再び指定された要素(Style="{static resource levelx}")で参照する必要があります。 <Setter Property="Grid.Grid.Background" Value"Red">は残念ながら動作しません。

このような要素グループをスタイルする適切な方法は何ですか?それぞれのネストされた要素の特定のスタイルを参照することは、不必要に乱雑に思えます。ここで

は、素子構造の具体的な例ですが、私は、これは、多くの異なる状況のための一般的な問題であることを考慮してください。

<Grid Style="{StaticResource Levels}"><!--1st level--> 
    <Grid><!--2nd level--> 
     <Grid></Grid><!--3rd level--> 
     <Image Source="/Resources/xxx.png"/><!--3rd level--> 
    </Grid> 
    <Grid><!--2nd level--> 
     <Grid></Grid><!--3rd level--> 
     <Image Source="/Resources/yyy.png" x:Name="yyy"/><!--3rd level--> 
    </Grid> 
    <Grid><!--2nd level--> 
     <Image Source="/Resources/zzz.png"/><!--3rd level--> 
    </Grid> 
</Grid> 

は、これはおそらく重複しているが、私は答えを見つけることができませんでした。

+0

プロパティのどのようなあなたがネストされた要素の間で共有することを目指していますか? 幅、高さ、マージンなど何か? それはちょうど私かもしれませんが、あなたのXAMLの例では避けるべきプロパティの重複を正確には示していません。 絞り込みたいことを詳しく教えてください。 – MichaelThePotato

+0

@MichaelThePotatoはい、そのようなプロパティは正確です。たとえば、私は親のグリッドに赤い背景を、2番目の階層のANYネストされたグリッドは緑色の背景を持ち、3番目のANYグリッドは黄色の背景を持ち、ANYの画像は3番目のレベルにあります(2番目のlvlグリッド)を特定の高さ/幅などにする必要があります。これらの各要素のスタイルの参照を指定する必要はありません。この例のCSSとまったく同じです。 – Demo

+0

正確に "レベル"の正確な定義は何ですか? 親グリッドが最初のレベルであると仮定し、すべての直接子グリッドを2番目のレベルとして意味しますか? XXX画像を所有するものが第2レベルで、YYYを所有するものが第3レベルであるということですか? – MichaelThePotato

答えて

0

あなたが望むものは、正確には不可能かもしれません。特にnレベルの場合。このようなことは、あなたに2つのレベルで望ましい行動を与えるでしょう。

CONTENT

<Grid Style="{StaticResource Levels}"> 
     <Grid VerticalAlignment="Top" Margin="20 20 0 0" Height="60"> 
      <Grid Height="40" VerticalAlignment="Center"> 
       <Grid Height="20" VerticalAlignment="Center"></Grid> 
       <Label></Label> 
      </Grid> 
     </Grid> 
     <Grid VerticalAlignment="Top" Margin="20 100 0 0" Height="60"> 
      <Grid Height="40" VerticalAlignment="Center"> 
       <Grid Height="20" VerticalAlignment="Center"></Grid> 
      </Grid> 
     </Grid> 
     <Grid VerticalAlignment="Top" Margin="20 180 0 0" Height="60"> 
      <Grid Height="40" VerticalAlignment="Center"> 
       <Grid Height="20" VerticalAlignment="Center"></Grid> 
      </Grid> 
     </Grid> 
    </Grid>  

スタイル定義

<Style x:Key="Levels" TargetType="Grid"> 
     <Setter Property="Background" Value="Blue"></Setter> 
     <Setter Property="Width" Value="400"></Setter> 
     <Style.Resources> 
      <Style TargetType="Grid"> 
       <Setter Property="Grid.Background" Value="Purple"/> 
       <Setter Property="Width" Value="200"></Setter> 
       <Style.Resources> 
        <Style TargetType="Grid"> 
         <Setter Property="Background" Value="Yellow"></Setter> 
         <Style.Resources> 
          <Style TargetType="Grid"> 
           <Setter Property="Background" Value="Tomato"></Setter> 
          </Style> 
          <Style TargetType="Label"> 
           <Setter Property="Height" Value="20"/> 
           <Setter Property="Width" Value="20"/> 
           <Setter Property="Background" Value="Azure"/> 
          </Style> 
         </Style.Resources> 
        </Style> 
       </Style.Resources> 
      </Style> 
     </Style.Resources> 
    </Style> 
+0

午後には午後がありません:現在の知識に何も追加していないようで、私が探していた実際の解決策を提示していないようでしたが、あなたの答えを受け入れるつもりはありませんでした。 は私を驚かせ、あなたのおかげで、解決策を見つけることができたと思う(ハックのようだが、うまくいく)。私はあなたに正しい答えを奪いたくないので、もしあなたがこれに応じてあなたの答えを変えたいならば:https://justpaste.it/x2dy、私は喜んで正しい答えとしてそれを受け入れるでしょう。 – Demo

+0

素晴らしい;)これは、私が必要とするレベルを上回って探していたものとまったく同じようです。ありがとうございました。 – Demo

1

このような意味ですか?

<Grid Margin="20"> 
    <Grid.Resources> 
    <Style TargetType="Grid"> 
    <Setter Property="Background" Value="Blue"></Setter> 
    </Style> 
    </Grid.Resources> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid Margin="20" Height="20" Grid.Row="0"> 
    </Grid> 
    <Grid Margin="20" Height="20" Grid.Row="1" Background="Yellow"> 
    </Grid> 
    <Grid Margin="20" Height="20" Grid.Row="2"> 
    </Grid> 
</Grid> 
+0

あなたの答えをありがとう。私は間違っているかもしれませんが、私はこれが私が探しているものだとは思っていません。なぜなら、a)親要素に1つのスタイルを参照したいのです。もっと重要なのは、b)これによって、私は様々な要素(グリッド、イメージ、ボタンなど)の第3 /第4レベルをスタイル付けすることができますか? – Demo

+0

私はスタイルに言及して正確に何を意味するのか分かりません。 要素タイプごとに、そのレベルで複数のリソースを持つことができます。 また、参照の一部にキーを付けることもできますx:要素の1つのキーを押して後で参照してください。 – Neeraj

+0

"スタイルを参照する"というのは、例えば 'Style =" {静的リソースMyStyle} "'を指していることを意味します - あなたの解決策は単に参照されたスタイルと同等のものであるのであまり重要ではありません。ここでの本当の問題は、TargetType = "grid"を定義することで、グリッド内のすべてのグリッドとグリッド自体にプロパティを設定していると思いますが、グリッドに対して異なるスタイルを設定できるようにすることですそれぞれのレベル。 CSSと同じように。どのように3/4レベルのすべてのグリッドに異なる高さ/幅を設定しますか? – Demo

関連する問題