2009-06-15 11 views
2

Ich verwende ein TabControl als Hauptarbeitsbereich in einer Anwendung, und ich möchte ein "Window" -Menüelement hinzufügen, das die Header der geöffneten Registerkarten auflistet. Die aktive Registerkarte (d. H. Fokussiert) sollte überprüft werden.Binding TabControl.Items zu MenuItem

Ich habe versucht, mit einem ItemsTemplate wie folgt:

  <MenuItem Header="_Window" ItemsSource="{Binding ElementName=ux_workspace, Path=Items}"> 
      <MenuItem.ItemTemplate> 
       <DataTemplate> 
        <MenuItem Header="{Binding Path=Header}" IsCheckable="True" IsChecked="{Binding IsFocused, Mode=OneWay}"> 
       </DataTemplate> 
      </MenuItem.ItemTemplate> 
     </MenuItem> 

Jeder MenuItem wird dann „verschachtelt“, sozusagen innerhalb eines anderen MenuItem, das ist wirklich nicht das beabsichtigte Ergebnis ist (das Kontrollkästchen ist im Kopfbereich, und es gibt einen separaten Rahmen um den internen Artikel).

Gibt es einen besseren Weg, dies zu tun?

Vielen Dank im Voraus.

Antwort

2

Während es wie es scheint, sollte eine Möglichkeit, dies mit Vorlagen zu tun, das Erstellen und einen Style mit scheint zu funktionieren:

<Style x:Key="TabMenuItem" TargetType="MenuItem"> 
    <Setter Property="Header" Value="{Binding Path=Header}" /> 
    <Setter Property="IsCheckable" Value="True" /> 
    <Setter Property="IsChecked" Value="{Binding Path=IsFocused, Mode=OneWay}" /> 
</Style> 

<MenuItem Header="_Window" 
    ItemsSource="{Binding ElementName=ux_workspace, Path=Items}" 
    ItemContainerStyle="{StaticResource TabMenuItem}" /> 
+0

Andy - brilliant, danke für deine schnelle und effektive Antwort. Ich musste eine Änderung an Ihrem Code vornehmen, um meine Zwecke zu unterstützen (entfernte den IsCheckable-Setter und fügte einen Click-Handler hinzu, um das entsprechende TabItem zu fokussieren), aber ansonsten funktionierte es perfekt. Ich würde die Antwort wählen, hilfreich, aber ich habe noch nicht genug Ruf (nur ein Neuling). Vielen Dank. – Malcolm

+0

Eigentlich ist die richtige Antwort, diese Antwort als akzeptiert zu markieren, also zeigen Sie, dass Sie die Antwort gefunden haben, nach der Sie gesucht haben. Klicken Sie auf das Häkchen unter der Anzahl der Stimmen, um die Antwort zu akzeptieren. – Andy

+0

Danke, Andy. Newbie schlägt wieder ...;) – Malcolm

2

Malcolm, Sie IsSelected statt IsFocused verwenden möchten, wenn die Bindung an das MenuItem.

Wenn Sie IsSelected anstelle von IsFocused verwenden, können Sie IsSelected auch an einen Modus = TwoWay binden, sodass Sie keinen Click-Handler verwenden müssen, um das entsprechende TabItem auszuwählen.

+0

Danke - das hat super geklappt. – Malcolm