2010-08-18 11 views
7

के लिए WPF शैलियाँ WPF TabControl, TabItem और TabPanel पर एक नौसिखिया प्रश्न है। स्टैकओवीएफ पर एक ऐसे प्रश्न के साथ एक संबंधित प्रश्न है जिसका मैंने खुशी से अपने ऐप में उपयोग किया था। यहाँ जवाब के लिए एक लिंक, और कोड स्निपेट के रूप में अच्छी तरह से है:टैबकंट्रोल/टैबपैनल/टैबइटेम

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> 

हालांकि यह अद्भुत है, मैं (एक स्टाइलशीट एक बेहतर स्थान के लिए संसाधन और शैली सामान ले जाने के लिए अच्छा लगेगा या पसन्द)। मेरा पहला प्रयास <TabControl.Resources> टैग को <Window.Resources> पर ले जाना था, लेकिन यह काम नहीं किया। मैंने कई बदलावों की कोशिश की लेकिन इसे काम पर नहीं मिला।

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

वेब सर्च कर रहे हैं और MSDN मुझे मेरी समस्या को हल मदद नहीं की, लेकिन इसके बजाय एक दूसरे (संबंधित) सवाल के साथ मुझे छोड़ दिया:: यहाँ एक प्रयास कुछ हद तक मैं काम करने के लिए उम्मीद का एक उदाहरण है जो वास्तव में है एक TabPanel, और यह TabControl से कैसे संबंधित है?

कोई भी मदद और सुझावों की बहुत सराहना की जाएगी।

(संपादित:। पिछले उदाहरण है कि कोड मेरे लिए काम नहीं करता है में टिप्पणी की)

उत्तर

9

alt text

TabControl एक विशेष TabPanel वर्ग StackPanel की तरह एक सामान्य पैनल का उपयोग करता है और नहीं, क्योंकि यदि आप TabControl के साथ चारों ओर गंदगी आपको पता चल जाएगा कि पैनल काफी करता है: मैं इस उदाहरण को हैक कर लिया कुछ चीजें जो जेनेरिक पैनल नहीं करते हैं। एक एकाधिक पंक्तियों में टैब हेडर आइटम समायोजित कर रहा है। दूसरा यह है कि वस्तुओं की पंक्तियों को पुन: व्यवस्थित किया जाएगा ताकि चयनित टैबिटम हेडर हमेशा अंतिम पंक्ति में रहे। मुझे लगता है कि यह और भी अधिक हो सकता है

मुझे यह जानने में काफी दिलचस्पी है कि खिड़की संसाधन अनुभाग में शैली क्यों नहीं डाली जाती है। मेरी प्रारंभिक प्रतिक्रिया यह तब तक काम करनी चाहिए जब तक मैंने कोशिश नहीं की। मैं इसे एक उत्तर के रूप में जोड़ रहा हूं क्योंकि इसलिए मुझे एक टिप्पणी में एक छवि जोड़ने की अनुमति नहीं है।

+0

"मेरी प्रारंभिक प्रतिक्रिया यह तब तक काम करनी चाहिए जब तक मैंने कोशिश नहीं की।" आह! तो मैं ** अभी भी ** हूँ :) TabPanel एनवीएम पर आपके स्पष्टीकरण के लिए धन्यवाद। समझ में आता है। मेरी जांच के दौरान मुझे एक 'सुराग' मिला, हालांकि, अगर (यदि मैं इसे सही ढंग से समझ गया) तो यह है कि TabPanel (ऐसा लगता है) के लिए कोई XAML नहीं है। उदाहरण के लिए, आप TabControl में '' '' तत्व नहीं जोड़ सकते हैं। (संपादित टिप्पणी) – Jeroen

+0

थोड़ा देर हो चुकी है, लेकिन मेरे पुराने प्रश्नों के माध्यम से मैंने वास्तव में देखा कि आपने मेरे एक प्रश्न का उत्तर दिया है। क्रेडिट जहां क्रेडिट देय है :) – Jeroen

1

आप शायद यह करने के लिए एक ControlTemplate बनाने की आवश्यकता होगी।

मैं अभी तक ControlTemplates से बहुत परिचित नहीं हूं। 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

क्रिस के विचार के लिए धन्यवाद। मैंने इस तरह के नमूने देखे लेकिन यह टैबहेडर्स की एक लेआउटिंग-प्रॉपर्टी को बदलने के लिए बहुत सारे कोड की तरह लगता है, क्योंकि यह आपको संपूर्ण कंट्रोल टेम्पलेट बनाता है। शायद एक गुरु दूसरी राय में फेंक सकता है, हमें बताएं कि क्या यह रास्ता है? – Jeroen

+0

मुझे पता है कि आपका क्या मतलब है :) मैं विस्तार करने की कोशिश करने के साथ चारों ओर खेल रहा था कि विस्तारक कैसे दिखता था, और यह एक आसान प्रक्रिया नहीं है। इसलिए मुझे उम्मीद है कि किसी के पास बेहतर तरीका होगा :) – Crispy