2012-03-15 4 views
0

クラスとスタイルに関連付けるときに見た目は正しいものの、正しい構文を取得できません。私は特定の動作を持つコントロールを持っています。いくつか私は、追加の動作を追加するために派生します。さて、各バージョンにスタイルを対応させたい。その最も単純な例では、スタイルがビジュアルに関連しており、関数の影響ではないことがわかっているので、私はこれらのクラスを無視します。以前の質問のいくつかは終わりましたが、私はまだ何かが欠けています。WPFクラスとそれに対応するビジュアルスタイルの継承

public class MyLabel : Label 
{} 

public class MyLabel2 : MyLabel 
{} 

上記から、私はリソース辞書に3つのスタイルを持つことができます。 1つは、 "MyLabel"から派生したコントロールと "MyLabel2"から派生したコントロールを持つインスタンスのためのものです。 "local:"は "Theme" xaml宣言ごとにクラスライブラリを指しています。

<Style x:Key="baseLabel" TargetType="Label"> 
    <Setter Property="FontSize" Value="10" /> 
</Style> 

<Style x:Key="styleMyLabel" TargetType="local:MyLabel" BasedOn="{StaticResource baseLabel}" > 
    <Setter Property="FontSize" Value="14" /> 
</Style> 

<Style x:Key="styleMyLabel2" TargetType="{x:Type local:MyLabel2}" BasedOn="{StaticResource styleMyLabel}" > 
    <Setter Property="FontSize" Value="22" /> 
</Style> 

また、非常に単純な目的のために、継承の目的のために単純なラベルを使用しています。私のウィンドウxamlファイル。ウィンドウxamlでは、 "src:"は私のクラスライブラリを指します。これはテーマで参照されている "local:"と同じライブラリです(しかし両方の方法を試しました...両方のインスタンスをxmlns:local両方とも、しかしそれは違いを生むようには見えなかった)。

対応するターゲットタイプのスタイルを持つクラスから派生したスタイルを明示的に指定する必要はありません。うまくいけば、何かばかげたシンプルだが、私はそれを包んだ私の頭を得ることができない...

答えて

0

オク、私は答えとして働くAPPLARSにつまずくが、なぜ理解していない...私はXAMLは、作品...しなくても、

<Style TargetType="{x:Type local:MyLabel2}" BasedOn="{StaticResource styleMyLabel}" > 
    <Setter Property="FontSize" Value="22" /> 
</Style> 

:(キー要素だけでXの除去)に

<Style x:Key="styleMyLabel2" TargetType="{x:Type local:MyLabel2}" BasedOn="{StaticResource styleMyLabel}" > 
    <Setter Property="FontSize" Value="22" /> 
</Style> 

から(第2派生したインスタンスがある)MyLabel2のスタイルを変更してみてください使用する "スタイル"を明示的に関連付けます。これは、クラスの関連付けに直接基づいています。

<src:MyLabel2 Content="Now Works as expected"/> 

x:Keyリファレンスの余分な使用がなぜそれを殺すのか、誰かが説明できるようになりましたか?つまり、クラスインスタンスによって暗黙のうちにx:キーが含まれていないが、それを持たないx:キーがある場合、直接クラスはそれを自動的に見つけます。

スタイルでAROUND MY PLAYINGから展開...

だから、ここで私が見つけたいくつかの特典があります。スタイルは、同じターゲットタイプに対して複数回定義することができます...しかし、x:キーリファレンスと、BasedOnリファレンスを持つことができます。このAPPEARSは、同じ数であるがデータ型パラメータが異なる関数にオーバーロードするようなものです。

"x:Key"リファレンスがスタイルに追加されるとすぐに、 "TargetType"の直接的なクラスインスタンスは自動的に適切なスタイルにリンクされませんでした。 "x:key"は、コントロールのxaml内にスタイルコンテキストを明示的に追加するクラスのインスタンスを必要とします。だから今、どのように両方の方法を持っている。 TargetTypeをベースクラスとして2番目のスタイルを作成しましたが、参照されるx:keyを指しているITs BasedOnがありました。これにより、スタイルのデフォルトのカスタマイズが得られますが、それをベースクラスと派生クラスに割り当てることもできます。したがって、コントロールの3つのバージョンすべてが、EXPLICITを参照せずに対応するスタイルと自動的に同期させることができます。

<Style TargetType="Label" x:Key="wpfBaseLabel"> 
    <Setter Property="FontSize" Value="11" /> 
</Style> 

<Style TargetType="Label" BasedOn="{StaticResource wpfBaseLabel}" /> 

<Style TargetType="{x:Type local:MyLabel}" BasedOn="{StaticResource wpfBaseLabel}"> 
    <Setter Property="Foreground" Value="Blue" /> 
</Style> 

だから、今、最後のXAMLの中、私は明示的なスタイルの関連の有無にかかわらず使用されているすべての3「クラス」を持つことができます。