2009-09-14 9 views
12

Czy istnieje łatwy sposób umieszczenia innej kontrolki (tj. Przycisku) w linii i na prawo od nagłówków kart w WPF?Na karcie WPF TabControl - czy mogę dodawać zawartość obok nagłówków tab?

W Internecie użyłbym funkcji pływającej lub pozycjonowania bezwzględnego, aby to osiągnąć.

Czerwona linia na tym zdjęciu to, co próbuję dostać się do: A control alongside of WPF Tabs http://www.jonkragh.com/images/text-next-to-tabs.png

Dzięki! Jon

+11

+1 dla najbardziej doskonały szkic dzieła;) –

+0

Dzięki Steffen! Utworzono za pomocą tabletu Wacom i OneNote! –

+0

Interesujące - korzystam też z najdoskonalszego OneNote codziennie i intensywnie, ale jedyną rzeczą, której od lat nie udało mi się wypróbować, jest dodanie tabletu do tego toolchaina, chociaż OneNote naprawdę prosi o dane wejściowe pióra, aby jeszcze bardziej rozwinąć imponujący zestaw funkcji bez niego - Twój komentarz może w końcu wywołać to teraz, dzięki :) –

Odpowiedz

9

Wytrzymała sposobem na to jest ponowne szablonie TabControl jak ja dla przycisku zamykania w moim ActiveAwareCommand sample:

<ControlTemplate x:Key="TabControlTemplate" TargetType="TabControl"> 
    <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition x:Name="ColumnDefinition0"/> 
      <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition x:Name="RowDefinition0" Height="Auto"/> 
      <RowDefinition x:Name="RowDefinition1" Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid Panel.ZIndex="1"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <TabPanel Margin="2,2,2,0" x:Name="HeaderPanel" IsItemsHost="true" KeyboardNavigation.TabIndex="1"/> 
      <Button Grid.Column="1" Command="{Binding DataContext.CloseCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">X</Button> 
     </Grid> 
     <Border x:Name="ContentPanel" Grid.Column="0" Grid.Row="1" BorderBrush="#D0CEBF" BorderThickness="0,0,1,1" KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"> 
      <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
       <Border Background="{TemplateBinding Background}"> 
        <Grid x:Name="PART_ItemsHolder"/> 
       </Border> 
      </Border> 
     </Border> 
    </Grid> 
</ControlTemplate> 

Wskazówki jak TabPanel i Button nigdy nie mogą się pokrywać. Rezultat:

alt text

+1

Dzięki! To wskazało mi właściwy kierunek. Zakończyłem kopiowanie domyślnego stylu/szablonu dla kart (za pomocą Blend), a następnie uczyniłem mój styl/szablon tak, że przycisk zakładki Dodaj jest zawsze obok ostatniej karty. Mogę opublikować ten kod, jeśli ktoś jest zainteresowany. –

+0

Próbuję dostosować ten szablon do silverlight4 i nie jest to tak proste jak mogłoby się wydawać. Czy masz czas, aby utworzyć wersję tego szablonu Silverlight? :) – Houman

0

Podobny do tego, w jaki sposób można to zrobić w Internecie, można po prostu umieścić kontrolkę tabulacji i kontrolę swobodną wewnątrz siatki i ustawić marginesy kontrolki swobodnej, aby uzyskać ją we właściwym miejscu. Możesz także użyć elementu Canvas, aby pomieścić kontrolkę Grid i floating i ustawić Canvas.Left i Canvas.Top.

Być może trzeba dynamicznie zmierzyć szerokość każdej zakładki, jeśli zakładki nie są określone podczas kompilacji.

Powiązane problemy