2012-07-20 8 views
5

मेरे पास ExpanderDataGrid के लिए परिभाषित किया गया है।ग्रिड विस्तारक शीर्षलेख - व्यवस्था सही नहीं हो सकती

<Expander IsExpanded="True" HorizontalAlignment="Stretch" Background="Blue"> 
    <Expander.Header> 
      <Grid HorizontalAlignment="Stretch" Background="BurlyWood"> 
         <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="3*" /> 
         <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 

         <TextBlock Text="{Binding Path=Name, StringFormat=\{0:D\}}" FontWeight="Bold" /> 
         <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Column="1"> 
         <TextBlock Text="Total : "/> 
         <TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" FontWeight="Bold"/> 
         </StackPanel> 
       </Grid> 
     </Expander.Header> 
     <ItemsPresenter /> 
</Expander> 

मुझे बाईं ओर आइटम नाम और समूह शीर्षलेख के दाहिने सिरे में योग प्रदर्शित करने की आवश्यकता है।

enter image description here

मैं कैसे शीर्षलेख की दाईं अंत करने के लिए 'कुल' स्थानांतरित कर सकते हैं: हालांकि मैं क्या मिलता है?

+0

अजीब, लेकिन यह मेरे लिए काम करता है। हो सकता है कि कोई अन्य कोड आपके तर्क को तोड़ दे? – Artiom

उत्तर

5

मैं एक ही समस्या थी और अगर मैं यह सही याद समस्या यह है कि Expander.Header के लिए ContentPresenterExpander की HorizontalAlignment परवाह नहीं करता है। मैंने कहीं यह अच्छा कामकाज पाया:

<Expander.Header> 
    <Grid HorizontalAlignment="{Binding Path=HorizontalAlignment, RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}, Mode=OneWayToSource}"> 
     ... 
    </Grid> 
</Expander.Header> 
+0

यह काम करता है! यह काम करता हैं! धन्यवाद। – nakiya

0

प्रयास करें इस

<Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
         <ColumnDefinition Width="5" /> //space between two textblocks 
        <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 

        <TextBlock Text="{Binding Path=Name, StringFormat=\{0:D\}}" FontWeight="Bold" /> 
        <TextBlock Text="Total : " Grid.Column="2"/> 
        <TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" FontWeight="Bold" Grid.Column="4"/> 

      </Grid> 

मुझे आशा है कि यह मदद मिलेगी

+0

अभी भी वही बात है। – nakiya

0

आप के लिए एक मूल्य के रिश्तेदार को Expander.Header में ग्रिड की चौड़ाई निर्धारित करने के लिए एक ValueConverter का उपयोग करके वांछित परिणाम प्राप्त कर सकते हैं Expander.ActualWidth, इस तरह:

<Expander Name="MyExpander" IsExpanded="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Background="Blue"> 
     <Expander.Header> 
      <Grid HorizontalAlignment="Stretch" Background="BurlyWood" Width="{Binding ElementName=MyExpander, Path=ActualWidth, Converter={MyConverters:ExpanderHeaderWidthConverter}, ConverterParameter=30}"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding Path=Name, StringFormat=\{0:D\}}" FontWeight="Bold" /> 
       <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Column="2"> 
        <TextBlock Text="Total : "/> 
        <TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" FontWeight="Bold"/> 
       </StackPanel> 
      </Grid> 
     </Expander.Header> 
     <ItemsPresenter /> 
    </Expander> 

ValueConverter के लिए कोड:

public abstract class BaseConverter : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

public class ExpanderHeaderWidthConverter : BaseConverter, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // The actuacl Width of the Expander 
     double width = (double)value; 

     // Default width difference 
     double diff = 25.0; 

     if (parameter != null) 
     { 
      // If the parameter is not null, try to use it as width difference 
      Double.TryParse(parameter.ToString(), out diff); 
     } 

     // If width - diff is less than 0, return double.NaN instead. 
     if (width - diff < 0) 
     { 
      return double.NaN; 
     } 

     // Return the modified width 
     return width - diff; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double width = (double)value; 
     double diff = 25.0; 
     if (parameter != null) 
     { 
      Double.TryParse(parameter.ToString(), out diff); 
     } 
     return width + diff; 
    } 
} 

वांछित परिणाम प्राप्त होने तक कनवर्टर पैरामीटर बदलने का प्रयास करें।

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