2010-11-22 12 views
8

के साथ काम नहीं कर रहा है मैं अपनी विंडो के लेआउट के रूप में एक WPF ग्रिड का उपयोग कर रहा हूं। इसमें दो कॉलम और पंक्तियों की संख्या है। पहला कॉलम विशेष रूप से लेबल के लिए उपयोग किया जाता है और दूसरा कॉलम उपयोगकर्ता-इनपुट फ़ील्ड (जैसे टेक्स्टबॉक्स, कॉम्बोबॉक्स, आदि) के लिए उपयोग किया जाता है। मेरे आवश्यकताएँ हैं:WPF TextBlock.TextTrimming ऑटो-साइज्ड कॉलमडिफ़िशन

  1. पहले कॉलम में जब यह पहली आवश्यकता खारिज कर देता है को छोड़कर 50 की एक न्यूनतम चौड़ाई और 180
  2. पहले कॉलम चाहिए आकार इसकी सामग्री के लिए अधिकतम चौड़ाई होना आवश्यक है।
  3. दूसरे कॉलम को शेष बचे हुए स्थान पर कब्जा करना होगा।

मैं नीचे XAML करने की कोशिश की:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

मुझे लगता है कि तीसरी पंक्ति लेबल उम्मीद कर रही थी, "लेबल की 180 इकाइयों में फ़िट नहीं होगा", जैसे "लेबल कुछ में छोटा कर दिया जाएगा कि वोन ... "। इसके बजाए, यह "टी" लापता होने के आधे हिस्से के साथ "लेबल दैट विल नहीं" पर फंस गया।

मैंने कहीं भी वेब पर एक अलग दृष्टिकोण की कोशिश की।

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition x:Name="LabelColumn" Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

यह अभिव्यक्ति ब्लेंड (कभी कभी ...) लेकिन नहीं पर काम कर रहे एप्लिकेशन चलते समय समाप्त हो गया। चलते समय, सभी लेबल पूरी तरह से गायब हो गए। मैंने घड़ी की खिड़की के माध्यम से देखा कि सभी टेक्स्टब्लॉक में 0 की वास्तविक चौड़ाई है जबकि लेबल कॉलम। एक्टुअलविड्थ 80 के बराबर है।

अन्य विकल्प क्या हैं?

उत्तर

7

आप, के रूप में स्तंभ परिभाषा पर MinWidth और MaxWidth की स्थापना हमेशा प्रतिपादन पर सम्मानित नहीं किया गया है TextBlock पर MinWidth और MaxWidth सेट की आवश्यकता है। बाध्यकारी अभिव्यक्तियों के भीतर ActualWidth का उपयोग करना समस्याग्रस्त हो सकता है क्योंकि ActualWidth एकाधिक रेंडर पास के दौरान सेट किया गया है और अप्रत्याशित परिणाम

दे सकता है