0

ページ全体を表示するグリッド内に単純な ListView があります (以下のスクリーンショットを参照)。スタイル (Horizo​​ntalContentAlignment) を使用して ListView の行をコンテナーの全幅に引き伸ばすことができましたが、ヘッダーで同じことを行うことはできません。ヘッダーの Horizo​​ntalContentALignement を Stretch に設定できません (下のスクリーンショットで強調表示されている部分を参照)。

どうすればこれを達成できるのでしょうか?

<Page.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Page.Resources>

<Grid Grid.Row="1">
    <ListView x:Name="itemListView" Margin="120,0,0,60" SelectionMode="None" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch">
        <ListView.Header>
            <Grid Margin="6" HorizontalAlignment="Stretch">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="Rank" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap" />
                <TextBlock Grid.Column="1" Text="Username" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap" />
                <TextBlock Grid.Column="2" Text="Score" Style="{StaticResource TitleTextStyle}" />
            </Grid>
        </ListView.Header>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="6" HorizontalAlignment="Stretch">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="{Binding Rank}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap" />
                    <TextBlock Grid.Column="1" Text="{Binding Username}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" />
                    <TextBlock Grid.Column="2" Text="{Binding Score}" Style="{StaticResource BodyTextStyle}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

ここに画像の説明を入力

4

1 に答える 1

1

1 つの方法は、コンバーターを使用することです。

<ListView ItemsSource="{Binding Players}">
    <ListView.Resources>
        <rxDummy:MultiplyConverter x:Key="MultiplyConverter"/>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn x:Name="Rank" Header="Rank" DisplayMemberBinding="{Binding Rank}"
                            Width="{Binding ActualWidth, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, 
                                        Converter={StaticResource MultiplyConverter}, 
                                        ConverterParameter=0.33}"/>
            <GridViewColumn Header="Username" DisplayMemberBinding="{Binding Username}" 
                            Width="{Binding ElementName=Rank, Path=ActualWidth}"/>
            <GridViewColumn Header="Score" DisplayMemberBinding="{Binding Score}" 
                            Width="{Binding ElementName=Rank, Path=ActualWidth}"/>
        </GridView>
    </ListView.View>
</ListView>

public class MultiplyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var d = System.Convert.ToDouble(value);
        double p = System.Convert.ToDouble(parameter,CultureInfo.InvariantCulture);
        return d * p;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2013-07-11T20:25:23.917 に答える