2012-11-27 11 views
67

मैं एक ग्रिड में एक लंबवत विभाजक जोड़ना चाहता हूं, लेकिन मैं केवल क्षैतिज पा सकता हूं। कोई संपत्ति नहीं है, जहां आप विभाजक की रेखा क्षैतिज या ऊर्ध्वाधर होना चाहिए, तो आप प्रवेश कर सकते हैं?वर्टिकल सेपरेटर कैसे जोड़ें?

मैंने बहुत कुछ खोजा, लेकिन इसके लिए एक छोटा और आसान समाधान नहीं मिला।

मैं .Net Framework 4.0 और विजुअल स्टूडियो 2012

अगर मैं 90 डिग्री से क्षैतिज विभाजक बारी बारी से करने की कोशिश है, यह करने के लिए अन्य घटकों के लिए "डॉक" क्षमता खो देता है का उपयोग करें।

घुमाया विभाजक इस तरह दिखता है:

<Separator HorizontalAlignment="Left" Height="100" Margin="264,26,0,0" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.5,0.5"> 
    <Separator.RenderTransform> 
     <TransformGroup> 
      <ScaleTransform/> 
      <SkewTransform/> 
      <RotateTransform Angle="90"/> 
      <TranslateTransform/> 
     </TransformGroup> 
    </Separator.RenderTransform> 
</Separator> 
+3

क्या आप सिर्फ स्टाइल वाले 'आयत' का उपयोग नहीं कर सकते? – paul

+0

जो काम करता है, लेकिन वह नहीं है जो मैं चाहता हूं। विभाजक इसे करने के लिए नियंत्रण होना चाहिए। वहाँ एक तरीका होना चाहिए ^^ –

+0

मुझे लगता है कि मैं वास्तव में आयताकार का उपयोग करता हूं, भले ही मुझे यह पसंद न हो, –

उत्तर

17

अतीत में मैं का उपयोग किया है शैली पाया here

<Style x:Key="VerticalSeparatorStyle" 
     TargetType="{x:Type Separator}" 
     BasedOn="{StaticResource {x:Type Separator}}"> 
    <Setter Property="Margin" Value="6,0,6,0"/> 
    <Setter Property="LayoutTransform"> 
     <Setter.Value> 
      <TransformGroup> 
       <TransformGroup.Children> 
        <TransformCollection> 
         <RotateTransform Angle="90"/> 
        </TransformCollection> 
       </TransformGroup.Children> 
      </TransformGroup> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Separator Style="{DynamicResource VerticalSeparatorStyle}" /> 

आप RenderTransform तो परिवर्तन के बजाय LayoutTransform में परिवर्तन निर्धारित करने की आवश्यकता लेआउट पास के दौरान होता है, न कि रेंडर पास के दौरान। लेआउट पास तब होता है जब डब्ल्यूपीएफ लेआउट नियंत्रणों की कोशिश कर रहा है और पता लगाता है कि प्रत्येक नियंत्रण कितना स्थान लेता है, जबकि डेंडर पास नियंत्रण के बाद डब्लूपीएफ लेआउट पास के बाद होता है।

आप LayoutTransform और RenderTransformhere या here

+0

यह बहुत अच्छा लगता है। हालांकि, यह इतना नहीं बदलता है। मैं अभी भी बनाम -2012 के गुई-डिजाइनर में नियंत्रण को डॉक नहीं कर सकता। शायद बनाम 2012 में एक बग? –

+0

@ मार्टिन वेबर मुझे यकीन नहीं है कि वीएस में नियंत्रण "डॉकिंग" से आपका क्या मतलब है। आपका विभाजक किस प्रकार का पैनल होस्ट करता है? यदि यह 'डॉकपैनल' है, तो आप अपने 'सेपरेटर' पर 'डॉकपैनेल.डॉक' सेट करने में सक्षम होना चाहिए, जिसे आप चाहते हैं कि आप जिस भी पक्ष को डॉक करना चाहते हैं। डब्ल्यूपीएफ के साथ, नियंत्रण की मेजबानी पैनल आमतौर पर नियंत्रण की स्थिति और कभी-कभी डिफ़ॉल्ट आकार निर्धारित करता है। यदि आप डब्ल्यूपीएफ के लेआउट में नए हैं, तो मैं इस लेख के माध्यम से पढ़ने की सिफारिश करता हूं: [डब्ल्यूपीएफ लेआउट्स - एक विजुअल क्विक स्टार्ट] (http://www.codeproject.com/Articles/30904/WPF-Layouts-A- विज़ुअल- त्वरित -स्टार्ट) – Rachel

+0

लिंक के लिए धन्यवाद! मैं इसे पढ़ूंगा। हां मैं डब्ल्यूपीएफ के लिए नया हूँ। "डॉकिंग" के साथ मेरा मतलब था, जब मैं किसी अन्य के पास नियंत्रण खींचता हूं तो मुझे एक लाल रेखा मिलती है ताकि एक पंक्ति में सभी नियंत्रण वास्तव में एक पंक्ति पर हों। बनाम2012 से सिर्फ एक सहायक। जब मैं विभाजक को घुमाता हूं, तो मुझे इन लाइनों को और नहीं मिलता है। –

34

के बीच अंतर के बारे में अधिक पढ़ सकते हैं यह वास्तव में क्या लेखक के लिए नहीं कहा है, लेकिन अभी भी, यह बहुत आसान है और अपेक्षा के अनुरूप वास्तव में काम करता है।

<StackPanel Grid.Column="2" Orientation="Horizontal"> 
    <Button >Next</Button> 
    <Button >Prev</Button> 
    <Rectangle VerticalAlignment="Stretch" Width="1" Margin="2" Stroke="Black" /> 
    <Button>Filter all</Button> 
</StackPanel> 
+3

यह यूडब्ल्यूपी के लिए काम करता है :) – dnxit

+2

यह यूडब्लूपी में बहुत अच्छा काम करता है। यदि आपको पतली रेखा के उपयोग की आवश्यकता है तो स्ट्रोक रंग के बजाय भरें और चौड़ाई को 3 पर सेट करें: 'आयत: क्षैतिज चेतावनी =" खिंचाव "ऊंचाई =" 3 "मार्जिन =" - 1,6 "स्ट्रोक =" काला "भरें =" सफेद " /> ' –

112

यह ठीक करना चाहिए क्या लेखक चाहता था:

<StackPanel Orientation="Horizontal"> 
    <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />    
</StackPanel> 

यदि आप एक क्षैतिज विभाजक चाहते हैं, Vertical करने के लिए StackPanel की Orientation बदलने

आयत काम करता है।

+2

मेरे मामले में केवल विभाजक पर स्टाइल की आवश्यकता थी, न कि स्टैकपैनल संलग्न। – Xtr

+0

मैंने हमेशा एक 'रेंडरट्रांसफॉर्म' लागू किया है। याद रखने के लिए साफ शॉर्टकट :) –

+0

एक जवाब होना चाहिए, यह सबसे अच्छा है। निश्चित नहीं है कि तीसरे जवाब के रूप में क्यों दिख रहा है! – Tatranskymedved

0

http://social.msdn.microsoft.com/Forums/vstudio/en-US/12ead5d4-1d57-4dbb-ba81-bc13084ba370/how-can-i-add-a-line-as-a-visual-separator-to-the-content-control-like-grid?forum=wpf से:

इस उदाहरण की कोशिश करो और अगर यह अपनी आवश्यकताओं फिट बैठता है, वहाँ यह करने के लिए तीन मुख्य पहलू हैं देखते हैं।

  1. लाइन। स्ट्रेच भरने के लिए सेट है।

  2. क्षैतिज रेखाओं के लिए रेखा का वर्टिकल अलाइनमेंट नीचे सेट किया गया है, और वर्टिकललाइन के लिए क्षैतिज हस्ताक्षर सही पर सेट है।

  3. हमें तब पंक्ति को बताने की ज़रूरत है कि कितनी पंक्तियां या कॉलम फैलाने के लिए हैं, यह या तो RowDefinitions या ColumnDefintions गिनती संपत्ति के लिए बाध्यकारी द्वारा किया जाता है।



    <Style x:Key="horizontalLineStyle" TargetType="Line" BasedOn="{StaticResource lineStyle}"> 
         <Setter Property="X2" Value="1" /> 
         <Setter Property="VerticalAlignment" Value="Bottom" /> 
         <Setter Property="Grid.ColumnSpan" 
           Value="{Binding 
              Path=ColumnDefinitions.Count, 
              RelativeSource={RelativeSource AncestorType=Grid}}"/> 
        </Style> 
    
        <Style x:Key="verticalLineStyle" TargetType="Line" BasedOn="{StaticResource lineStyle}"> 
         <Setter Property="Y2" Value="1" /> 
         <Setter Property="HorizontalAlignment" Value="Right" /> 
         <Setter Property="Grid.RowSpan" 
           Value="{Binding 
              Path=RowDefinitions.Count, 
              RelativeSource={RelativeSource AncestorType=Grid}}"/> 
        </Style> 
    </Grid.Resources>   
    
    <Grid.RowDefinitions> 
        <RowDefinition Height="20"/> 
        <RowDefinition Height="20"/> 
        <RowDefinition Height="20"/> 
        <RowDefinition Height="20"/> 
    </Grid.RowDefinitions> 
    
    <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="20"/> 
        <ColumnDefinition Width="20"/> 
        <ColumnDefinition Width="20"/> 
        <ColumnDefinition Width="20"/> 
    </Grid.ColumnDefinitions> 
    
    <Line Grid.Column="0" Style="{StaticResource verticalLineStyle}"/> 
    <Line Grid.Column="1" Style="{StaticResource verticalLineStyle}"/> 
    <Line Grid.Column="2" Style="{StaticResource verticalLineStyle}"/> 
    <Line Grid.Column="3" Style="{StaticResource verticalLineStyle}"/> 
    
    <Line Grid.Row="0" Style="{StaticResource horizontalLineStyle}"/> 
    <Line Grid.Row="1" Style="{StaticResource horizontalLineStyle}"/> 
    <Line Grid.Row="2" Style="{StaticResource horizontalLineStyle}"/> 
    <Line Grid.Row="3" Style="{StaticResource horizontalLineStyle}"/> 
    

2

यह कोई कार्यक्षमता और सभी दृश्य प्रभाव के साथ यह कर का एक बहुत ही आसान तरीका है,

एक ग्रिड का उपयोग करें और बस इसे अनुकूलित करें।

<Grid Background="DodgerBlue" Height="250" Width="1" VerticalAlignment="Center" Margin="5,0,5,0"/> 

ऐसा करने का एक और तरीका।

+1

उत्कृष्ट !!!! इसे इस तरह हल किया गया, लेकिन एक ही विचार: '<ग्रिड क्षैतिज चेतावनी =" खिंचाव "ऊंचाई =" 1 "मार्जिन =" 0,10 "पृष्ठभूमि =" काला "/>' –

6

मुझे "लाइन" नियंत्रण का उपयोग करना पसंद है। यह आपको सटीक नियंत्रण देता है जहां विभाजक शुरू होता है और समाप्त होता है। यद्यपि यह वास्तव में एक विभाजक नहीं है, यह फ़ंक्शन एक ही तरीका है, खासकर स्टैकपैनल में।

रेखा नियंत्रण भी एक ग्रिड के भीतर काम करता है। मैं स्टैकपैनल का उपयोग करना पसंद करता हूं क्योंकि आपको ओवरलैपिंग के विभिन्न नियंत्रणों के बारे में चिंता करने की ज़रूरत नहीं है।

<StackPanel Orientation="Horizontal"> 
    <Button Content="Button 1" Height="20" Width="70"/> 
    <Line X1="0" X2="0" Y1="0" Y2="20" Stroke="Black" StrokeThickness="0.5" Margin="5,0,10,0"/> 
    <Button Content="Button 2" Height="20" Width="70"/> 
</StackPanel> 

X1 = एक्स प्रारंभिक स्थिति (एक खड़ी रेखा के लिए 0 होना चाहिए)

X2 = एक्स न खत्म होने वाली स्थिति (एक्स 1 = एक खड़ी रेखा के लिए X2)

Y1 = y प्रारंभिक स्थिति (चाहिए एक खड़ी रेखा)

Y2 = y न खत्म होने वाली स्थिति (Y2 = वांछित लाइन ऊंचाई)

मैं "मार्जिन" का उपयोग खड़ी रेखा के किसी भी पक्ष पर गद्दी जोड़ने के लिए 0 हो। इस उदाहरण में, बाईं ओर 5 पिक्सेल और ऊर्ध्वाधर रेखा के दाईं ओर 10 पिक्सल हैं।

चूंकि लाइन नियंत्रण आपको लाइन के प्रारंभ और अंत के एक्स और वाई निर्देशांक चुनने देता है, तो आप इसे किसी भी कोण पर क्षैतिज रेखाओं और रेखाओं के लिए भी उपयोग कर सकते हैं।

संबंधित मुद्दे