1

アイテムを表示するためのカスタムテンプレートを備えた通常のリストボックスがあります。私が管理できないのは、リストボックスの全幅にわたってテンプレートを水平方向に引き伸ばすことです。

私の問題は、メインウィンドウのすべての要素が動的に配置され、ウィンドウサイズの変更方法に合わせてサイズが変更されることです。ネットで検索したところ、Horizo​​ntalAligment="Stretch"を配置するというアイデアでした。これを可能な限り試みましたが、大きな成功はありませんでした。

私のxamlコードは次のようになります:

<UserControl x:Class="LiveGames.Dealer.UsersList"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         Background="Transparent">
<Border CornerRadius="10" BorderBrush="White" BorderThickness="2" >
     <Grid>
        <Grid.Resources>
            <DataTemplate x:Key="PlayerTemplate">
                <WrapPanel>
                    <Border CornerRadius="10" BorderBrush="White" BorderThickness="2" >
                        <Border.Background>
                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Offset="0.0" x:Name="gradientOne_Name" Color="Red" />
                                <GradientStop Offset="1.0" x:Name="gradientTwo_Name" Color="DarkRed" />
                            </LinearGradientBrush>
                        </Border.Background>
                        <Grid >
                            <Grid.ColumnDefinitions x:Uid="5">
                                <ColumnDefinition  Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Name="RowH" Height="50"/>
                            </Grid.RowDefinitions>

                            <!--  <TextBlock VerticalAlignment="Center" Margin="5" Grid.Column="0" Grid.Row="1" Text="Player: " FontSize="18" />-->
                            <TextBlock VerticalAlignment="Center" Margin="5" Grid.Column="0" Text="{Binding Path=ID}" FontSize="22" FontWeight="Bold"/>
                        </Grid>
                    </Border>
                </WrapPanel>
            </DataTemplate>
        </Grid.Resources>
        <Canvas>
            <ListBox Name="userList" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" ItemsSource="{Binding}"  ItemTemplate="{StaticResource PlayerTemplate}" HorizontalContentAlignment="Stretch">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem" >
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>
        </Canvas>
    </Grid>
</Border>

誰かがこれを行う方法を知っていますか、おそらくコードの背後にありますか?

M

4

2 に答える 2

6

あなたはこれを試すことができます:

<Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="Width" Value="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}"></Setter>
</Style>
于 2012-11-07T12:35:28.667 に答える
1

最近この問題が発生し、次のXamlで解決しました(ListBox.ItemContainerStyleに適用)

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>       

また、リストボックスをキャンバス内に配置すると、親に合うように伸びないことに注意する必要があります。Canvasesは子に対してレイアウトを実行しないため、ListBoxを設定したサイズになります。

于 2012-07-06T13:38:06.290 に答える