2016-04-12 3 views
0

ControlTemplate.Triggerのバインディングに関するstackoverflowに関する多くの質問がありましたが、ControlTemplateのコントロールのdatatriggerへのバインディングに関する情報は何も実行していません。私ControlTemplateインサイドDatatrigger for ControlTemplate内の長方形

私はRectangleを持っています。 depency propertyInput1Activeが1に等しい場合を除いて、塗りつぶしは通常赤です。次のコードを試しましたが、正しく動作していないようです。

<Style TargetType="{x:Type local:CustomAxis_IO}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid      
        <Rectangle Fill="Red"> 
        <Rectangle.Style> 
         <Style TargetType="{x:Type Rectangle}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Input1Active}" Value="1"> 
            <Setter Property="Fill" Value="Green"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Rectangle.Style> 
        </Rectangle> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

はどのようにコントロールの依存関係プロパティInput1Activeに長方形のためdatatriggerをバインドすることができますか?

答えて

0

私は私の問題を解決しました。結局、ControlTemplate.Triggerを作成して参照する必要がありました。Rectangle名前を変更しようとしていました。

<Style TargetType="{x:Type local:CustomAxis_IO}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid> 


         <Rectangle Fill="Red" x:Name="Axis1Rect" Width="100" Height="20"> 

         </Rectangle> 

       </Grid> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Input1Active}" Value="1"> 
         <Setter TargetName="Axis1Rect" Property="Fill" Value="Green"/> 
        </DataTrigger> 

       </ControlTemplate.Triggers> 
      </ControlTemplate> 

     </Setter.Value> 
    </Setter> 
</Style> 
1

スタイル内でテンプレートのバインドを試みている可能性があります。

あなたがたControlTemplateの中にいると、とにかくあなたのテンプレート内部の状況を変えるためにトリガーのための個々のスタイルを使用する必要はありません。

これを試してみてください:

<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid> 
        <Rectangle x:Name="InternalRectangle" Fill="Red"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Input1Active" Value="1"> 
         <Setter TargetName="InternalRectangle" Property="Fill" Value="Green"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

ControlTemplate.Triggersを使用すると、はるかに簡単ではるかに柔軟である何、あなたのテンプレートはありません設定したテンプレートの部分に名前を付けます。