2008-11-19 4 views
6

Ich habe eine Registerkarte, die ausgeblendet werden soll, wenn eine Eigenschaft (BlahType) auf 1 gesetzt ist und auf 0 gesetzt ist. Das ist was ich WILL tun:Wie kann ich die "Visibility" eines TabItems selektiv über DataBinding/Triggers setzen?

<TabItem Header="Blah"> 
    <TabItem.Triggers> 
     <DataTrigger Binding="{Binding BlahType}" Value="0"> 
      <Setter Property="TabItem.Visibility" Value="Hidden" /> 
     </DataTrigger> 
    </TabItem.Triggers> 
</TabItem> 

Das Problem ist, dass ich diesen Fehler:

"Triggers collection members must be of type EventTrigger" 

Wenn Sie diesen Fehler Google Sie, dass Dr. WPF explains the error sehen werden. Gibt es einen sauberen Weg, um das zu erreichen, was ich hier erreichen will?

Antwort

13

Ich glaube, dass die Trigger-Auflistung eines Steuerelements derzeit nur EventTriggers unterstützt. Wenn Sie einen Datatrigger verwenden möchten einfach legen Sie sie in einem Stil, für Ihr Beispiel:

<TabItem Header="Blah"> 
    <TabItem.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding BlahType}" Value="0"> 
        <Setter Property="TabItem.Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabItem.Style> 
</TabItem> 
+0

Sie haben einen leichten Tippfehler ... „“ sollte „“ ... das ist großartig, danke! –

+0

Richtig du bist, vielen Dank für das Abholen! –

0

Nun, Sie können das nicht mit Triggern tun (außer Sie befinden sich in einem DataTemplate, ControlTemplate oder einem Style).

Sie können eine Bindung verwenden, Sie müssen einen benutzerdefinierten ValueConverter schreiben, der zwischen 0/1 nach Visible/Hidden übersetzt, und dann können Sie die Visibility-Eigenschaft an die BlhaType-Eigenschaft binden.

Oder Sie können einfach die Sichtbarkeit in Code und geben Sie auf einen XAML-basierten Ansatz (das was ich getan hätte).