2016-04-12 9 views
0

Ich habe viele Fragen zu Stackoverflow in Bezug auf die Bindung von ControlTemplate.Trigger, aber ich habe keine Informationen über die Bindung an eine datatrigger einer Steuerung innerhalb einer ControlTemplate.Datentrigger für Rectangle innerhalb von ControlTemplate

In meinem ControlTemplate habe ich eine Rectangle. Die Füllung ist normalerweise rot, außer wenn die depency propertyInput1Active gleich 1 ist. Ich habe den folgenden Code versucht, aber es scheint nicht richtig zu funktionieren.

<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> 

Wie kann ich die Datatrigger für das Rechteck auf die Abhängigkeitseigenschaft Input1Active für die Steuerung binden?

Antwort

0

Ok ich löste mein Problem. Es sieht so aus, als ob ich nach allem einen ControlTemplate.Trigger erstellen musste und meine Rectangle Referenz anspreche, die ich versuchte, namentlich zu ändern.

<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

Es kann sein, weil Sie ein Template in einem Stil sind versucht.

Da Sie sich in einem ControlTemplate befinden, müssen Sie keine individuellen Stile für Trigger verwenden, um die Dinge in Ihrem Template trotzdem zu ändern.

Versuchen Sie folgendes:

<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 Verwendung und Teile der Vorlage Benennung einzurichten, was Ihre Vorlage tut, ist viel einfacher und wesentlich flexibler.

Verwandte Themen