2011-09-14 43 views
8

Tôi muốn tạo ListBoxItem với bố cục bao gồm hai khu vực, một 'phao: bên trái' và một 'phao: phải', với mục tổng thể lấp đầy toàn bộ chiều rộng được phân bổ cho ListBox và ListBox làm đầy thùng chứa của nó (ví dụ: . mở rộng để lấp đầy không gian có sẵn).Làm cách nào để sao chép 'float: right' trong XAML?

Làm thế nào tôi có thể đạt được điều này trong XAML?

nhờ

+1

Bạn có thể sử dụng một bảng hoặc lưới thành phần cho rằng, thiết lập một hoặc cả hai cột để tự động -kích thước. –

Trả lời

8

Đối với "mục tổng thể lấp đầy toàn bộ chiều rộng phân bổ cho các ListBox" bạn cần có một phong cách như thế này:

<Style TargetType="ListBoxItem"> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
</Style> 

và tùy chọn vô hiệu hóa cuộn ngang cho ListBox:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" .. > 

đối với bảng điều khiển gốc của DataTemplate, bạn có thể sử dụng dockpanel:

<DockPanel> 
    <SomeControlLeft DockPanel.Dock="Left" Margin="0 0 5 0" /> 
    <SomeControlRight DockPanel.Dock="Right" Margin="5 0 0 0" /> 
    <SomeControlFill /> 
</DockPanel> 

hoặc một mạng lưới:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <SomeControlLeft Grid.Column="0" /> 
    <SomeControlRight Grid.Column="4" /> 
    <SomeControlFill Grid.Column="2" /> 
</Grid> 
+0

Cảm ơn vì điều này, bạn đã giúp tôi đạt được những gì tôi đang tìm kiếm. – MalcomTucker

0

Sử dụng một Grid vị trí hoặc các yếu tố dock để phần khác nhau của hình thức/bảng điều khiển.

+0

bạn có thể sử dụng lưới trong mẫu danh sách hộp danh sách không? – MalcomTucker

+0

Vẻ đẹp của XAML là bạn có thể sử dụng hầu hết mọi thứ bên trong hầu hết mọi thứ khác. Nếu bạn phải đặt câu hỏi đó, câu trả lời (khoảng 99% thời gian) sẽ luôn là một ** CÓ **. – qJake

+0

Ok cảm ơn. Tôi mới sử dụng XAML - nếu bạn có thời gian, bạn có thể cung cấp mẫu mã không? Chỉ cần một bộ xương sẽ là tuyệt vời! Cảm ơn – MalcomTucker

1

Đây là cách tôi sẽ làm điều đó:

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <Grid Background="Red"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <TextBlock Text="{TemplateBinding Content}"/> 
         <TextBlock Text="{TemplateBinding Tag}" Grid.Column="1"/> 

        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 

    <ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}"> 
     <ListBoxItem Content="Lorem" Tag="Ipsum"/> 
     <ListBoxItem Content="Hello" Tag="World"/> 
     <ListBoxItem Content="Be" Tag="Happy"/> 
    </ListBox> 

</Grid> 
Các vấn đề liên quan