2017-02-15 5 views
2

私はデータビューのプログラミング言語の設計点から、私にはstyle targettypeを元のプロパティに再バインドする必要があるのはなぜですか?

<Window x:Class="WpfTutorialSamples.Styles.StyleDataTriggerSample" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="StyleDataTriggerSample" Height="200" Width="200"> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <CheckBox Name="cbSample" Content="Hello, world?" /> 
     <TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="48"> 
      <TextBlock.Style> 
       <Style TargetType="TextBlock"> 
        <Setter Property="Text" Value="No" /> 
        <Setter Property="Foreground" Value="Red" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=cbSample, Path=IsChecked}" Value="True"> 
          <Setter Property="Text" Value="Yes!" /> 
          <Setter Property="Foreground" Value="Green" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
     </TextBlock> 
    </StackPanel> 
</Window> 

をトリガーにするように、それはすでに、<TextBlock>内にネストされているので、ライン<Style TargetType="TextBlock">は、完全に不要であり、コードブロックhereを参照していますどんなセッタープロパティでもTextBlockタイプに適用する必要があります。だから、なぜラインは<Style TargetType="TextBlock">が必要ですか?

<Style TargetType>は、TextBlock以外のタイプのものもありますか?

答えて

1

なぜこの行が必要ですか?

Aスタイルすなわちないインライン、リソースとして定義することができる、と指定TargetTypeを持っていない場合、どのようにXAMLパーサーは、それを解析してセッターによって指定されたプロパティを設定することができるようになっていますか?それはできません。または少なくともそれはしません。

はちょうどあなたのであなたはまだ(グローバル)リソースとして使用することができる正確に同じクラスのインスタンスを作成し、TargetTypeが実際に必要とされる設定されているStyleインラインで定義することができます。

TextBlock以外のタイプのものはありますか?

いいえ、TextBlockから派生した型を除きます。別の型を指定すると、実行時にBAML(コンパイル済みXAML)が解析されるときに例外が発生します。

2

任意のクラスTextBlockを使用できます(たとえば、FrameworkElement)。

CustomizedTextBlockなどを実装すると、たとえば、プロジェクトでTextBlockに定義されているスタイルを使用できます。

この例の例はhereです。

+0

*どのようなクラスのTextBlockでも* ---何から派生したものを使用できますか? – Graviton

+1

'class CustomizedTextBlock:TextBlock'は、' TargetType = "TextBlock" '(例えば...)で' Style'を使うことができました。 'TextBlock'自体は' FrameworkElement'から派生しています。だから、 'TextBlock Style'に' TargetType = "FrameworkElement" 'を使うことができます。しかし、私は単純な 'TextBlock'の努力を見ることができません... – WPFGermany

関連する問題