2012-01-04 13 views
6

भरने के लिए नहीं बढ़ाया जाएगा। मैं अपने LOB फॉर्म में अपने लेबल और टेक्स्टबॉक्स का फ़ॉन्ट आकार विंडो आकार बदलने या संकल्प परिवर्तन के साथ बढ़ने और घटाने के लिए चाहता हूं। इसे प्राप्त करने के लिए मैंने अपने लेबल और टेक्स्टबॉक्स को व्यूबॉक्स में रखा है।टेक्स्टबॉक्स को व्यूबॉक्स

लेबल और कस्टम रेडियो बटन मेरी अपेक्षा के अनुसार व्यवहार करते हैं, लेकिन टेक्स्टबॉक्स दृश्यबॉक्स को भरने के लिए क्षैतिज रूप से नहीं फैलेगा (माफ करना प्रतिनिधि की वजह से छवि पोस्ट नहीं कर सकता)। यदि आप उनमें टाइप करते हैं तो टेक्स्टबॉक्स क्षैतिज रूप से व्यूबॉक्स को भर देंगे। viewbox भीतर (LastChildFill = "सही" साथ)

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.186*"/> 
      <ColumnDefinition Width="0.814*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="0.127*"/> 
      <RowDefinition Height="0.873*"/> 
     </Grid.RowDefinitions> 
     <Viewbox Margin="0,0,0.917,0"> 
      <Label Content="First name:"/> 
     </Viewbox> 
     <Viewbox Grid.Column="1"> 
      <TextBox TextWrapping="Wrap"/> 
     </Viewbox> 
    </Grid> 

मैं ग्रिड, StackPanel और dockpanel रखने की कोशिश की है और उसके बाद बक्सें रखने:

यहाँ कोड का एक उदाहरण है जो मैं के साथ काम कर रहा हूँ है इन लेआउट नियंत्रणों के भीतर लेकिन यह या तो काम नहीं किया। टेक्स्टबॉक्स को क्षैतिज रूप से पैरेंट व्यूबॉक्स भरने के लिए क्या है?

यह समस्या इस प्रकार है: WPF TextBox won't fill in StackPanel लेकिन यह समस्या stackpanels के साथ है, व्यूबॉक्स नहीं।

+0

पहली बात यह है कि अपना एक्सएमएल सही बनाएं: आप अपने प्रत्येक ग्रिड आइटम के लिए कॉलम/पंक्ति निर्दिष्ट नहीं करते हैं। – GameAlchemist

+1

@ विन्सेंटपीएल वास्तव में कोई फर्क नहीं पड़ता। कॉलम और पंक्ति को 0 – mydogisbox

उत्तर

10

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

पहले:

<Viewbox Grid.Column="1" Grid.Row="0" Stretch="Uniform" > 
    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=ActualWidth}"> 
     <TextBox TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </Grid> 
</Viewbox> 

यह आप वास्तव में पाठ बॉक्स में खिंचाव होगा, लेकिन व्यवहार viewbox से उम्मीद अक्षम करें। क्यूं कर? हमने व्यूबॉक्स को पहलू अनुपात रखने के लिए कहा, और टेक्स्टबॉक्स की पूरी चौड़ाई को भरने के लिए टेक्स्टबॉक्स सेट किया, जो टेक्स्टबॉक्स का आकार रखता है।

दूसरा:

ग्रिड, लेबल से लिया है अपने viewbox की scaletransform साथ संशोधित करने के लिए एक ऊंचाई को जोड़ने के लिए किया जाएगा।

यह मैंने कोशिश नहीं की है, लेकिन इसमें एक मूल्य कनवर्टर शामिल होगा।

निष्कर्ष: व्यूबॉक्स अपने बच्चों को ले जाने के तरीके के कारण, आप जो चाहते हैं उसे हासिल करने का कोई आसान तरीका नहीं है। यदि आप क्षैतिज रूप से फैलाना चाहते हैं, तो मेरा पहला समाधान ठीक काम करता है, अगर आप स्केल करना चाहते हैं। मेरा अनुमान है कि आपको इसे स्वयं करना है।

+1

AcutalWidth या ActualHeight को बाध्य करने के बारे में एक चेतावनी: "क्योंकि वास्तविक हाइट एक गणना मूल्य है, इसलिए आपको अवगत होना चाहिए कि विभिन्न परिचालनों के परिणामस्वरूप इसमें कई या वृद्धिशील रिपोर्ट किए जा सकते हैं लेआउट सिस्टम।लेआउट सिस्टम बाल तत्वों, पैरेंट तत्वों की बाधाओं के लिए आवश्यक माप स्थान की गणना कर सकता है, और इसी तरह। "इससे किसी भी बाइंडिंग को वास्तविक आकार या वास्तविक विजिट का आकार बदलने के लिए कई बार आग लग सकती है। यदि इसका भी प्रदर्शन होता है तो इसका प्रदर्शन प्रभाव होगा इनमें से कई bindigs। – mydogisbox

+0

+1 बेशक आप सही हैं और इसके लायक संकेत हैं, लेकिन इस मामले में मुझे बेहतर समाधान की जानकारी नहीं है। – dowhilefor

+0

हा हा! मैंने इसे वास्तविकता के बिना किया! – mydogisbox

1

तो आप क्या काम नहीं करता है चाहता हूँ/आसान नहीं है तो यह नकली:

<TextBox GotFocus="TextBox_GotFocus" HorizontalAlignment="Stretch" BorderThickness="0" Grid.Column="1"/> 
    <Viewbox HorizontalAlignment="Left" Stretch="Uniform" Grid.Column="1"> 
     <TextBox x:Name="NameTextBox" Width="50" TextWrapping="Wrap" Text="Text" BorderThickness="0"/> 
    </Viewbox> 

    private void TextBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     NameTextBox.Focus(); 
     NameTextBox.SelectionStart = NameTextBox.Text.Length; 
    } 

असल में क्या होता है एक और TextBoxViewbox के पीछे है और जब पीछे TextBox फोकस हो जाता है, यह करने के लिए ध्यान केंद्रित बदल जाता है Viewbox का TextBox। यह कुछ अजीब आकार देने का उत्पादन करेगा क्योंकि आपके पास सापेक्ष आकार के साथ आपका ग्रिड सेटअप है। आपको अपने ग्रिड कॉलम/चौड़ाई आकारों के साथ खेलने की आवश्यकता होगी जब तक आप अपनी इच्छित प्रभाव प्राप्त न करें।

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