Tìm kiếm trên google và stackoverflow của tôi không thành công, vì vậy tôi trình bày cho cộng đồng câu hỏi này.Lưới bên trong StackPanel: tại sao tự động và * hoạt động lạ?
(Điều này là tất cả được tạo ra sử dụng VS2010 và .NET 4.0, trong một mặc định trống WPF Solution)
Xem xét XAML sau:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
Những gì bạn sẽ dự đoán chiều rộng của "aborder2" để được?
Nếu bạn đoán "20 pixel", bạn sẽ sai. Câu trả lời đúng là 110 pixel.
xem xét XAML này:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
Những gì bạn sẽ dự đoán chiều rộng của "aborder2" được?
Nếu bạn đoán 20 pixel hoặc 110 pixel, bạn sẽ sai. Câu trả lời đúng là 200 pixel.
Tôi không thể hiểu điều này và điều đó khiến tôi phát điên. Có vẻ như câu trả lời nên rõ ràng; rõ ràng có một số tương tác giữa một cột lưới tự động điền và stackpanel gây ra lưới để freak ra. Nhưng điều đó dường như không làm cho cảm giác - bất kỳ quy tắc nào điều chỉnh hành vi này dường như tùy ý. Tại sao 110 pixel? Tại sao không phải là 109 pixel hoặc 100 pixel? Tôi sẽ hiểu nếu cột tự động kích thước không mở rộng đầy đủ hoặc một cái gì đó, nhưng để có cột cố định chiều rộng ngẫu nhiên bỏ qua chiều rộng của nó đã để lại cho tôi một vỏ cháy của một nhà phát triển.
Mọi trợ giúp hoặc đèn hướng dẫn sẽ được đánh giá cao!
Tại sao không aborder2 có được một Grid.Column? – 0x4f3759df
Tôi không nghĩ để đặt một trong vì nó nên mặc định để cột 0. Tôi chỉ cần thử nghiệm nó và rõ ràng thiết lập các cột dường như không tạo sự khác biệt. – pfw
Có câu trả lời cho bạn nhưng tôi phải về nhà trước tiên –