5

に対して以下をExpander定義していDataGridます。

<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>

グループ ヘッダーの左端に項目名、右端に合計を表示する必要があります。しかし、私が得るのはこれです:

ここに画像の説明を入力

「合計」をヘッダーの右端に移動するにはどうすればよいですか?

4

3 に答える 3

5

私は同じ問題を抱えていました。それを正しく覚えていれば、問題はContentPresenterforがof をExpander.Header気にしないことです。この素晴らしい回避策をどこかで見つけました:HorizontalAlignmentExpander

<Expander.Header>
    <Grid HorizontalAlignment="{Binding Path=HorizontalAlignment, RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}, Mode=OneWayToSource}">
        ...
    </Grid>
</Expander.Header>
于 2012-07-20T09:03:55.760 に答える
0

次のように、ValueConverter を使用して Expander.Header の Grid の幅を 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;
    }
}

目的の結果が得られるまで、ConverterParameter を変更してみてください。

于 2012-07-20T08:49:17.920 に答える
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>

これが役立つことを願っています

于 2012-07-20T08:29:46.907 に答える