2010-09-09 7 views
26

एक विंडो में मेरे पास कुछ फाइलें निर्दिष्ट करने के लिए DockPanel एस की एक सूची है। प्रत्येक डॉकपैनल में टेक्स्टबॉक्स (पथ के लिए) और एक बटन (फ़ाइल के लिए ब्राउज़ करने के लिए) होता है।डब्ल्यूपीएफ डॉकपैनल पहला बच्चा शेष स्थान का उपयोग करता है

मैं एक साधारण WPF पेज निर्मित किया है समस्या यहाँ असर दिखाना चाहते:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="150" 
    Height="22"> 
    <DockPanel> 
     <TextBox HorizontalAlignment="Stretch"/> <!-- path to file --> 
     <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file --> 
    </DockPanel> 
</Page> 

समस्या यह है कि मैं पाठ बॉक्स के दाईं ओर स्थित बटन चाहते है, लेकिन उस के बाद से वास्तव में छोटे होने के लिए पाठ बॉक्स का कारण बनता है डॉकपैनल का लास्ट चाइल्ड वह बटन है जो शेष स्थान का उपयोग करता है। मैंने इसे चारों ओर घुमाकर और LastChildFill="False" सेट करके इसे बदलने की कोशिश की लेकिन यह केवल बटन को छोटा होने का कारण बनता है, टेक्स्टबॉक्स चौड़ा नहीं बना रहा (यहां तक ​​कि HorizontalAlignment="Stretch" के साथ)।

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

मेरे लिए ऐसा लगता है कि टेक्स्टबॉक्स की सेटिंग। हॉरिज़ोंटल एलाइनमेंट का सम्मान नहीं किया जाता है। मैं पहले नियंत्रण को जितना संभव हो उतना स्थान उपयोग कर सकता हूं लेकिन फिर भी टैब ऑर्डर को सुरक्षित रख सकता हूं?

उत्तर

23

यदि आप डॉकपैनेल का व्यवहार नहीं चाहते हैं, तो डॉकपैनल का उपयोग न करें।

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 

    <TextBox /> 
    <Button Content="..." Grid.Column="1"/> 
</Grid> 
+4

+1 क्योंकि यह TabOrder मुद्दा नहीं है। यदि कोई इस तरह के साधारण परिदृश्यों में कॉलमडिफिनिशन टाइप करने से बचना चाहता है, तो इस समाधान पर एक नज़र डालें: http://rachel53461.wordpress.com/2011/09/17/wpf-grids-rowcolumn-count-properties/ – surfen

34

इस तरह यह बनाओ:

<DockPanel LastChildFill="True"> 
    <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file --> 
    <TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file --> 
</DockPanel> 
+4

शानदार! पूरी तरह से अनजान और अप्रिय, लेकिन एक आकर्षण की तरह काम किया और एक अजीब तरह की भावना बनाता है कि डॉकपैनेल कैसे डिज़ाइन किया गया है। अच्छा निर्णय। – TonganJedi

+8

मैंने इसे कई अवसरों पर देखा है। मेरी मुख्य चिंता यह है कि XAML में तत्वों का क्रम अब विंडो के दृश्य लेआउट से मेल नहीं खाता है। और यह टैब ऑर्डर को गड़बड़ कर देता है। –

+0

मैं @ क्रिस्टोफर लिफ्ट +1 से सहमत हूं, लेकिन अगर किसी को इसकी आवश्यकता है, तो यहां टैबॉर्ड समस्या के लिए कामकाज है। यह काफी मैन्युअल काम हो सकता है और हमेशा अच्छी तरह से काम नहीं करता है (उदाहरण के लिए डेटाग्रिड के साथ): http://stackoverflow.com/a/4808810/724944 – surfen

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