2014-09-01 18 views
5

Tôi biết cách columndefinition hoạt động trong XAML nhưng có điều tôi muốn làm và không biết làm thế nào.XAML Độ rộng của cột màu * không chiếm không gian có sẵn

tôi muốn 4 cột như thế:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="110" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="80" /> 
    <ColumnDefinition Width="80" /> 
</Grid.ColumnDefinitions> 
  1. cột đã cố định chiều rộng
  2. cột phải lấy tất cả các không gian có sẵn (có nó là giữa cột và đây chính là vấn đề)
  3. cột có chiều rộng cố định
  4. Cột
  5. có chiều rộng cố định

Cột thứ 2 chứa văn bản và vấn đề là khi văn bản đó quá ngắn, cột thứ 2 không chiếm hết dung lượng trống. nó nhận được nhỏ hơn tự động và điều này cho mỗi hàng. Tôi có thể làm cho nó hoạt động với mã này trong textblock:

MinWidth="2000" 

Nhưng đó không phải là cách tốt vì con số này có thể quá thấp khi màn hình lớn.

Ở đây toàn bộ listview chứa 4 cột:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="110" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="80" /> 
        <ColumnDefinition Width="80" /> 
       </Grid.ColumnDefinitions> 
       <Image Height="110" Width="110" Grid.Column="0" Source="{Binding blabla}" HorizontalAlignment="Stretch" /> 
       <TextBlock Text="{Binding blabla}" TextWrapping="Wrap" Margin="5,0,0,0" Grid.Column="1" FontSize="16" HorizontalAlignment="Stretch" TextAlignment="Left" FlowDirection="LeftToRight" MinWidth="2000" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontStretch="UltraCondensed"/> 
       <TextBlock Grid.Column="2" TextWrapping="Wrap" Foreground="Black" Margin="5,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Center"/> 
       <Image Source="{Binding blabla, Converter={StaticResource ImgConverter}}" Grid.Column="3" Width="76" Height="76" HorizontalAlignment="Center" Stretch="None" VerticalAlignment="Center" Margin="0"/> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Thực sự kiểm tra chiều rộng kiểm soát của phụ huynh. Điều đó sẽ không được đặt thành chiều rộng đầy đủ mà bạn mong đợi. – loop

+0

Ý bạn là gì? cha mẹ kiểm soát những gì? – XHotSniperX

+0

xin lỗi không thể diễn đạt rõ ràng. Nhưng bạn có thể điều tra xem bạn đang chiếm bao nhiêu diện tích trong Thiết kế. – loop

Trả lời

8

bố trí của bạn là rõ ràng nhưng bỏ lỡ một điều nhỏ đó gây ra rằng nội dung của ListViewItem được tiếp sinh lãi sang trái vì đó là được định nghĩa trong ListViewItemStyle mặc định được đặt tên là "ItemContainerStyle" cho ListView Control.

Tất cả những gì bạn cần làm là thêm ListViewItemStyle này mà tôi đã sửa đổi để căng các nội dung theo chiều ngang và theo chiều dọc trên tất cả các không gian có sẵn cho mục Tài nguyên của bạn

<Style x:Key="StretchedListViewItemStyle" 
      TargetType="ListViewItem"> 
     <Setter Property="HorizontalContentAlignment" 
       Value="Stretch" /> 
     <Setter Property="VerticalContentAlignment" 
       Value="Stretch" /> 
</Style> 

Sau đó thiết lập nó như là ItemContainerStyle cho ListView như sau:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" ItemContainerStyle="{StaticResource StretchedListViewItemStyle}"/> 
+0

Wow bạn tìm thấy nó! Không biết rằng listview được tạo kiểu như thế. Cảm ơn nhiều! – XHotSniperX

+0

Bạn được chào đón :) –

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