2011-10-25 11 views
0
<Window x:Class="AiweeeTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.Resources> 
      <SolidColorBrush x:Key="backcolorType" Color="Red"></SolidColorBrush> 
      <SolidColorBrush x:Key="forecolorType" Color="Green"></SolidColorBrush> 
      <Style x:Key="TextboxStyle" TargetType="{x:Type TextBox}"> 
       <Setter Property="Background" Value="Yellow"/> 
       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Background" Value="{StaticResource backcolorType}"/> 
         <Setter Property="Foreground" Value="{StaticResource forecolorType}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Resources> 
     <TextBox Name="textbox1" Width="100" Height="25" Style="{StaticResource TextboxStyle}" IsEnabled="False"/> 
    </Grid> 
</Window> 

上記で定義したトリガーを使用してテキストボックスの背景を更新することはできませんが、テキストボックスコントロールテンプレートテンプレート全体をコピーして "DisabledBackgroundBrush"私自身の色です。違いは何ですか、私はすでにこの問題に関していくつかのリンクを見てきました。しかし私はそれの背後にある理由を理解することができません。私が理解しているように、トリガは定義された順序で起動されますが、ウィンドウ内でローカルに定義されたトリガは、無効にしたときにテキストボックスの背景色をオーバーライドできる必要があります。どうか明らかにしてください。Textboxテンプレートを使用しないローカルトリガーの無効な背景

PS:私はここで特別なことを達成しようとしているわけではありませんが、なぜそうであるか理解したいだけです。これは、WPFのような状況で直感的ではないという私に少し不満を与えています。

答えて

0

私は、WPFがDependencyPropertyの値を適用する順序と関係があると推測しています。ホールド動作と

  1. プロパティシステムの強制
  2. アクティブアニメーション、またはアニメーション:This MSDN articleは、基本的には順序が行く依存関係プロパティの優先順位

    にいくつかの良い情報を持っています。

  3. ローカル値
  4. TemplatedParentテンプレートプロパティ TemplatedParentテンプレートから
  5. トリガ
  6. 暗黙スタイル
  7. スタイルをトリガーTemplatedParentテンプレートの
  8. プロパティセット(XAML属性通常経由)
  9. テンプレートトリガー
  10. スタイルセッター
  11. デフォルト(テーマ)スタイルテーマのスタイル
  12. テーマのスタイルで
  13. セッター
  14. 継承
  15. 依存関係プロパティのメタデータから
  16. デフォルト値
+1

そうに中

  • アクティブトリガ要約する。ベースコントロールのテンプレートに既にトリガが適用されている場合(つまり、IsEnabledのトリガが既にテキストボックスコントロールテンプレートに適用されて灰色になっている場合)...これらのシナリオのすべてで、独自のテンプレートを作成してそれをオーバーライドする必要がありますトリガーの行動?それは、私たちが石の時代(窓のコントロール)に戻って、これらのようなことを達成するための不安からコントロールを作り出さなければならないのですか?私はWPFが途方もない変化をもたらしたことに同意します、私たちはコントロールで何かを行うことができます...しかし、私にこのようなものは欠けているように見えますか?それとも、私は完全に間違っている? –

  • +0

    しかし、これはトンです! –