2012-07-06 16 views
1

我有一個正常的列表框與自定義模板來顯示項目。我無法管理的是將模板水平拉伸到列表框的完整widget上。如何獲得一個動態的ListBox ItemTemplate水平拉伸ListBox的全部寬度?

我的問題是,主窗口中的所有元素都是動態放置的,它們隨着窗口大小更改方法一起調整大小。我已經通過網絡搜索,想法是把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> 

沒有任何人有任何想法如何做到這一點,甚至在後面的代碼?

中號

回答

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

最近我有這個問題,用下面的XAML(可應用到ListBox.ItemContainerStyle)

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

此外,你應該知道解決它是通過把您的列表框畫布內,它不會伸展以適合其父母。它將按照您設置ListBox的大小進行調整,因爲Canvases'不會對其子項執行佈局。

+0

Unfortuantelly這並不爲我工作。我試圖將列表框放在畫布外,但這也沒有幫助。 – 2012-07-09 12:11:49

+0

@ user1448231如果你還沒有,我強烈建議你在snoopwpf.codeplex.com上下載Snoop for WPF。使用這個,你可以直觀地調試你的可視化樹,並找出哪些元素有哪些屬性設置(按Horizo​​ntalAlign過濾)。您可能會發現綁定沒有正確設置水平對齊,或者另一個元素需要水平對齊。最好的祝福, – 2012-07-09 13:07:40