2010-08-18 22 views
7

WPF TabControl, TabItem ve TabPanel'de yeni bir soru var. Benim app mutlu bir şekilde kullanılan bir cevap ile StackOVF ile ilgili bir soru var. İşte yanı cevaba bir bağlantı ve kod snippet'ine: bu harika ikenWPF Stilleri TabControl/TabPanel/TabItem

WPF: Center TabItems in a TabControl

<TabControl> 
    <TabControl.Resources> 
     <Style TargetType="{x:Type TabPanel}"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
    </TabControl.Resources> 

    <TabItem Header="Test 1" /> 
    <TabItem Header="Test 2" /> 
    <TabItem Header="Test 3" /> 
    <TabItem Header="Test 4" /> 
</TabControl> 

, ben (daha iyi bir konuma bir stil Kaynakları ve Stil malzeme taşımak isteriz ya gibi). İlk denemem <TabControl.Resources> etiketini <Window.Resources>'a taşımaktı ancak bu çalışmadı. Birkaç varyasyon denedim ama işe yaramaya gelemedim.

<!-- Doesn't work as expected: --> 
<Window.Resources> 
    <Style TargetType="{x:Type TabPanel}"> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
    </Style> 
</Window.Resources> 

Web'de arama ve MSDN benim sorunu çözmeye yardımcı olmadı, ancak bunun yerine ikinci bir (ilgili) soru ile beni bıraktı: Burada biraz çalışmak için beklenen bir girişim örneği ne aslında olduğunu bir TabPanel, ve TabControl ile nasıl ilgilidir?

Her türlü yardım ve öneri çok takdir edilecektir.

(Düzenlendi:. Kod benim için çalışmıyor son örnekte yorumladı)

cevap

9

alt text

TabPage'ler StackPanel gibi genel bir Paneli özel TabPanel sınıfını kullanır ve: Ben bu örneği kesmek Jenerik panellerin yapamadığı birkaç şey. Biri sekme başlık öğelerini birden çok satırda ayarlıyor. Bir diğeri, seçilen satır başlığının her zaman en son satırda olması için öğelerin satırlarının yeniden düzenleneceğidir. Ben daha fazla

yapıyor olabilirsiniz Ben pencere kaynağı bölümünde stili koyarak neden çalışmadığını bilmek oldukça ilgimi çekiyor. İlk tepkim, denemeden önce çalışmalıydı. Bunu bir yanıt olarak ekliyorum, çünkü bir yorumda bir görüntü eklememe izin vermeyeceğim.

+0

"İlk tepkim, çalışana kadar çalışmalıydı." Ah! Bu yüzden hala ** bekliyorum :) TabPanel NVM'deki açıklamanız için teşekkürler. Mantıklı. Benim araştırma sırasında bulduğum bir 'ipucu' (eğer bunu doğru anladıysam) TabPanel için XAML (görünmüyor). Örneğin, TabControl'e '' '' öğesi ekleyemezsiniz. (Düzenlenmiş yorum) – Jeroen

+0

Biraz geç, ama eski sorularımı geçerken aslında sorularımdan birini cevapladığınızı gördüm. Kredinin vadesi geldiği yer :) – Jeroen

1

Muhtemelen bunu yapmanın bir ControlTemplate oluşturmanız gerekir.

Henüz ControlTemplates ile aşina değilim. Panel oldukça yapar fark edeceksiniz TabControl ile etrafında karışıklık çünkü eğer http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.tabpanel.aspx

<Style TargetType="{x:Type TabControl}"> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabControl}"> 
        <Grid KeyboardNavigation.TabNavigation="Local"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <TabPanel Name="HeaderPanel" 
            Grid.Row="0" 
            Panel.ZIndex="1" 
            Margin="0,0,4,-1" 
            IsItemsHost="True" 
            KeyboardNavigation.TabIndex="1" 
            HorizontalAlignment="Center"/> 
         </Grid> 

       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

Chris için teşekkürler. Örnekleri bu şekilde gördüm, ancak bu sadece tüm ControlTemplate'i oluşturmanızı sağladığından, tabheader'ların bir mizanpaj özelliğini değiştirmek için çok fazla kod gibi görünüyor. Belki de bir Guru ikinci bir fikre girebilir, bunun yolunun olup olmadığını bize söyler misiniz? – Jeroen

+0

Ne demek istediğini biliyorum :) Expander'ın nasıl göründüğünü değiştirmeye çalışıyorum ve bu kolay bir süreç değil. Bu yüzden birisinin daha iyi bir yolu olduğunu umuyorum :) – Crispy