2010-08-24 42 views
5

Tôi đang cố gắng để có được các mục trong một ListBox để kéo dài toàn bộ chiều rộng của ListBox. Tôi đã tìm thấy một số bài viết đối phó với HorizontalContentAlignment = "Stretch" nhưng tôi đã không thể làm cho nó hoạt động trong ứng dụng WP7 của tôi. Dưới đây là ListBox của tôi:WP7 ListBox Mục để điền vào chiều rộng của ListBox

<ListBox Margin="8" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Collection}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="Black" CornerRadius="3" Background="#FFE88D34" 
       BorderThickness="1" HorizontalAlignment="Stretch" > 
       <Grid Background="Transparent" HorizontalAlignment="Stretch" > 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <TextBlock 
         Grid.Column="0" HorizontalAlignment="Stretch" 
         Margin="2"          
         FontSize="10" 
         Text="{Binding Property1}"/> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

tôi đang cố gắng để có được Border cam để span toàn bộ chiều rộng của ListBox để tất cả các mục danh sách có cùng kích thước và không chỉ kích thước của văn bản trong TextBlock.

Trả lời

2

Tôi tin rằng đây là một lỗi trong bản phát hành beta, bởi vì HorizontalContentAlignment nên là nó.

là giải pháp thay thế bạn có thể phải sử dụng giá trị độ rộng cố định.

2

Có vẻ như John Gardner là điểm với điều này là một chút khiếm khuyết trong bản Beta. Nó hoạt động tốt trong Silverlight "đồng bằng cũ", nhưng mang lại các khu vực trung tâm kỳ lạ trong điện thoại. Tuy nhiên, thật dễ dàng để làm việc trong quá khứ.

  • Loại bỏ/nhận xét mục nhập ListBox.ItemContainerStyle trong hộp danh sách của bạn ở trên.

  • Trong Blend, hãy chọn ListBox của bạn trong bảng Đối tượng và Dòng thời gian, nhấp chuột phải và chọn Chỉnh sửa mẫu bổ sung/Chỉnh sửa mục được tạo mục (ItemContainerStyle)/Chỉnh sửa bản sao ... Chọn tên/khóa và vị trí cho tài nguyên phong cách mới.

  • Xác định vị trí kiểm soát ContentContainer, và thiết lập Alignment Content ngang của nó để ràng buộc vào Alignment Content ngang đặt trong mục tiêu thụ mẫu này, (HorizontalContentAlignment = "{TemplateBinding HorizontalContentAlignment}") như sau:

    <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
    

Khi bạn đã nói với ContentControl cách nó sẽ căn chỉnh nội dung (ahem) của nó, kết quả sẽ là những gì bạn mong đợi.

+0

Cảm ơn gợi ý! Tôi nghĩ rằng tôi đã làm theo hướng dẫn của bạn một cách chính xác, nhưng nó vẫn không hoạt động. Bạn có thể đăng XAML hoàn chỉnh cho ListBox để tôi có thể so sánh nó với những gì tôi có. –

+0

Rất tiếc, tôi đã bỏ lỡ nhận xét cho đến bây giờ. Đừng quên cũng đặt HorizontalContentAlignment thành Stretch trong danh sách kiểu hộp danh sách. Tất cả những thay đổi của tôi là nói cho ControlTemplate thực sự chú ý đến thiết lập, mà nếu không bị bỏ qua hoàn toàn. – avidgator

8

Sử dụng tài nguyên tĩnh sau khi ItemContainerStyle của Listbox:

ItemContainerStyle="{StaticResource ListboxStretchStyle}" 

<Application.Resources> 
    <Style TargetType="ListBoxItem" x:Key="ListboxStretchStyle"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Application.Resources> 
6

Đây là những gì tôi sử dụng cho rằng:

   <ListBox Height="430" Margin="50,70,50,110" Name="myListBox" > 

        <ListBox.ItemContainerStyle> 
         <Style TargetType="ListBoxItem"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate> 
             <ContentPresenter 
              HorizontalAlignment="Stretch" 
              VerticalAlignment="Stretch" /> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </ListBox.ItemContainerStyle> 

        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <Border Background="{StaticResource PhoneAccentBrush}" > 
           <TextBlock 
            Text="{Binding Text}" 
            FontSize="30" 
            Foreground="{StaticResource PhoneForegroundBrush}" /> 
          </Border> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 

       </ListBox> 
hơn

quặng ít tìm thấy ở đây: http://timdams.wordpress.com/2011/11/30/creating-a-wp7-app-listbox-items-of-the-same-width/

Các vấn đề liên quan