2017-11-24 6 views
0

Ich habe folgendes Element:Stil Grenze in Buttons Control mit Datatrigger

<Button Click="btn_Click" Name="aName"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Border Name="tmpBorder" Padding="10"> 
       <TextBlock Text="General" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <DataTrigger Binding="{Binding doIt}" Value="someString"> 
        <Setter TargetName="tmpBorder" Property="Background" Value="Red" /> 
       </DataTrigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Mein Ziel ist es hinter dem Hintergrund des Border Elements in den ControlTemplate wenn doIt wird als „somestring“ im Code zu setzen. doIt ist ein öffentliches Mitglied der definierten Klasse im Code hinter und wird mit der Methode btn_Click festgelegt.

Ausführung der Methode und Einstellung doIt funktioniert gut, aber der Hintergrund der Grenze ändert sich nicht zu rot. Fehle ich etwas Wichtiges?

+0

Ich habe das erzwungene [tag: wpf] -Tag aus dem Titel Ihrer Frage entfernt. Bitte lesen Sie [hier] (https://stackoverflow.com/help/tagging) warum. – dymanoid

+1

@ tg24 Gibt es einen Grund, warum Sie nicht direkt einen Stil auf die Grenze mit dem Datentrigger anwenden? –

+0

@dymanoid danke. – tg24

Antwort

0

sollte diese

arbeiten
<Button Click="btn_Click" Name="aName"> 
     <Button.Template> 
      <ControlTemplate TargetType="Button"> 
       <Border Padding="10" Background="{TemplateBinding Background}"> 
         <TextBlock Text="General" /> 
       </Border> 
       <ControlTemplate.Triggers> 
         <DataTrigger Binding="{Binding doIt}" Value="someString"> 
          <Setter Property="Background" Value="Red" /> 
         </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
    </Button.Template> 
</Button> 

EDIT: da der erste Ansatz mit einem Stil der Grenze angewendet hat nicht funktioniert versuchen direkt

Wenn Sie wie ein Hintergrund keine Eigenschaft in einer Steuerungsvorlage werden Ihre Änderungen mit einem Trigger nicht funktionieren

<Button Click="btn_Click" Name="aName"> 
     <Button.Template> 
      <ControlTemplate TargetType="Button"> 
       <ControlTemplate.Resources> 
        <Style TargetType="{x:Type Border}"> 
         <Setter Property="Background" Value="Transparent"/> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding doIt}" Value="someString"> 
           <Setter Property="Background" Value="Red" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </ControlTemplate.Resources> 
       <Border Padding="10" Background="{TemplateBinding Background}" Style> 
         <TextBlock Text="General" /> 
       </Border> 
      </ControlTemplate> 
    </Button.Template> 
</Button> 
+0

Leider funktioniert das nicht auch für mich. Ist es nicht notwendig, dem Setter eine TargetName-Eigenschaft zu geben? – tg24

+0

Versuchen Sie, dem Rahmen ein x zu geben: Name und verwenden Sie den Zielnamen im Setter –

+0

Wie in meinem oben gezeigten Beispielcode? Ich habe es mit x: Name und nur mit Name getestet. Beides funktioniert nicht. – tg24