WPF

2012-08-27 11 views
42
में ढेर पैनल में दोनों को छोड़ दिया और सही पक्ष पर नियंत्रण संरेखित

मैं निम्नलिखित कोड है:WPF

<DockPanel> 
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal"> 
     <RadioButton Content="_Programs" 
        IsChecked="{Binding Path=ProgramBanksSelected}" IsEnabled="{Binding Path=ProgramsEnabled}" Margin="8" /> 
     <StackPanel> 
      <Label Content="Master" Height="28" Name="MasterFileStatus" VerticalContentAlignment="Center"/> 
     </StackPanel> 
    </StackPanel> 
    ... 

रेडियो बटन ढेर पैनल में बाईं ओर रखा जाना चाहिए (मैं के लिए कुछ बटन हटा दिया उदाहरण को अव्यवस्थित नहीं करना) और लेबल (जिसे मैंने अस्थायी रूप से एक नेस्टेड स्टैकपैनल में रखा है) दाएं तरफ होना चाहिए।

मैंने संरेखण के पहले से ही संयोजनों की कोशिश की लेकिन मुझे दाईं ओर लेबल नहीं मिल सका। इसे पूरा करने के लिए मुझे क्या जोड़ना चाहिए?

+2

आप वास्तव में के रूप में आप अर्द्ध उन्नत संरचना के किसी भी प्रकार बस एक ग्रिड –

+5

सही जवाब इस पोस्ट में के रूप में एक DockPanel उपयोग करने के लिए है के लिए जाना चाहते हैं, ढेर पैनलों की बहुत ज्यादा नहीं पूछ सकते हैं के रूप में जल्द: http://stackoverflow.com/questions/2023201/align-items-in-a-stack-panel – pasx

उत्तर

61

बस एक StackPanel, StackPanelsढेर प्रयोग नहीं करते। वे स्पष्ट कारणों से, दिशा में संरेखण की अनुमति नहीं देते हैं जिसमें वे ढेर होते हैं। इसलिए तरह एक Grid का प्रयोग करें, स्तंभ परिभाषा के साथ:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="Auto" /> 
</Grid.ColumnDefinitions> 
+0

मुझे लगता है कि यह काम करेगा, हालांकि मैं अधिक उत्तरों की प्रतीक्षा करूंगा, क्योंकि स्टैकपैनल्स के साथ मुझे लाभ है कि जब स्क्रीन कम चौड़ी हो जाती है, तो आइटम लपेट जाएंगे, जो मैं उपयोग करता हूं जब मैं खो देता हूं ग्रिड। –

+2

@MichelKeijzers: यदि आप इस तरह की कुछ कल्पना चाहते हैं तो आपको अपने पैनल को लागू करने की आवश्यकता हो सकती है। –

+0

उत्तर के लिए धन्यवाद ... मुझे नहीं पता कि मैं उस मामले में सही संरेखित करने के बारे में आपका समाधान पसंद करता हूं, लेकिन यह मुझसे पूछे गए प्रश्न के बाहर है। –

2

जैसा कि आपने StackPanel का अभिविन्यास Horizontal पर सेट किया है, HorizontalAlignment संपत्ति बाल तत्वों पर काम नहीं करेगी। यदि आपको अतिरिक्त नियंत्रण की आवश्यकता है, तो आप StackPanel रख सकते हैं, हालांकि मैं इच्छित लेआउट बनाने के लिए Grid (अन्य चीज़ों के साथ) पर स्विच करने की अनुशंसा करता हूं।

इसके अलावा, Grid आप प्रत्येक स्तंभ की वास्तविक चौड़ाई नियंत्रित करने के लिए अनुमति देगा:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="50" /> 
     <ColumnDefinition Width="150" /> 
    </Grid.ColumnDefinitions> 

    <RadioButton 
     Grid.Column="0" 
     ... 
    /> 

    <Label 
     Grid.Column="1" 
     ... 
    /> 
</Grid> 

+1

आपका पहला उदाहरण काम नहीं करेगा, वे अभी भी क्षैतिज रूप से ढेर होंगे क्योंकि अंतरिक्ष अनुमति देता है और संरेखण कुछ भी नहीं करेगा। –

+0

@KDiTraglia हाँ, अभी परीक्षण किया गया - आप सही हैं; जब 'अभिविन्यास = "क्षैतिज" ', यह' क्षैतिज संरेखण 'को अनदेखा करता है; अब हटा रहा है, धन्यवाद =] – newfurniturey

11

भले ही इस पुरानी है, जैसे मैंने किया था किसी को इस पार आना चाहिए, यहाँ एक सरल उपाय है।

एक नया ग्रिड बनाएं और उस ग्रिड के अंदर अलग-अलग क्षैतिज संरेखण के साथ दो स्टैक पैनल रखें।

<Grid> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 
     <!--Code here--> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> 
     <!--Code here--> 
    </StackPanel> 
</Grid> 

संभव मुद्दा यह है कि अब बिना अतिरिक्त दो से निपटने के लिए एक दूसरे के साथ ओवरलैप कर सकता है।

+0

मेरे लिए अच्छा काम करता है और काफी आसान है। – gbdavid

0

उपयोगकर्ता @pasx सही है। आपको डॉकपैनल का उपयोग करना चाहिए और बाएं तरफ रेडियोबटन को डॉक करना चाहिए, और लेबल के साथ अपने स्टैकपैनल को दाईं ओर ले जाना चाहिए।

<DockPanel> 

    <DockPanel 
     DockPanel.Dock="Top" 
     LastChildFill="False" > 

     <RadioButton 
      DockPanel.Dock="Left" 
      Content="_Programs" 
      IsChecked="{Binding Path=ProgramBanksSelected}" 
      IsEnabled="{Binding Path=ProgramsEnabled}" 
      Margin="8" /> 

     <StackPanel 
      DockPanel.Dock="Right"> 

      <Label 
       Content="Master" 
       Height="28" 
       Name="MasterFileStatus" 
       VerticalContentAlignment="Center"/> 

     </StackPanel> 

    </DockPanel> 
    ... 
संबंधित मुद्दे