Tôi có lưới 3 cột trong cửa sổ có GridSplitter trên cột đầu tiên. Tôi muốn đặt MaxWidth của cột đầu tiên thành một phần ba của Cửa sổ chính hoặc Trang Width
(hoặc ActualWidth
) và tôi muốn thực hiện điều này trong XAML nếu có thể.Cách đặt cột lưới MaxWidth tùy thuộc vào cửa sổ hoặc kích thước màn hình trong XAML
Đây là một số mẫu XAML để chơi trong XamlPad (hoặc tương tự) thể hiện những gì tôi đang làm.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" Width="200"/>
<ColumnDefinition x:Name="Column2" MinWidth="50" />
<ColumnDefinition x:Name="Column3" Width="{ Binding ElementName=Column1, Path=Width }"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Background="Green" />
<GridSplitter Grid.Column="0" Width="5" />
<Label Grid.Column="1" Background="Yellow" />
<Label Grid.Column="2" Background="Red" />
</Grid>
</Page>
Như bạn có thể thấy, độ rộng cột bên phải được ràng buộc với chiều rộng của cột đầu tiên, vì vậy khi bạn trượt cột bên trái sử dụng splitter, cột bên phải cũng làm như vậy :) Nếu bạn trượt cột bên trái sang phải, cuối cùng nó sẽ trượt trên một nửa trang/cửa sổ và sang phía bên phải của cửa sổ, đẩy cột 2 sang bên phải và
Tôi muốn ngăn điều này bằng cách đặt MaxWidth của cột 1 thành một phần ba chiều rộng cửa sổ (hoặc thứ gì đó tương tự). Tôi có thể làm điều này trong mã phía sau khá dễ dàng, nhưng làm thế nào để làm điều đó trong "XAML Only"?
EDIT: David Schmitt đề xuất sử dụng SharedSizeGroup thay vì ràng buộc, đây là một gợi ý tuyệt vời. mẫu mã của tôi sẽ giống như thế này thì:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" SharedSizeGroup="ColWidth" Width="40"/>
<ColumnDefinition x:Name="Column2" MinWidth="50" Width="*" />
<ColumnDefinition x:Name="Column3" SharedSizeGroup="ColWidth"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Background="Green" />
<GridSplitter Grid.Column="0" Width="5" />
<Label Grid.Column="1" Background="Yellow" />
<Label Grid.Column="2" Background="Red" />
</Grid>
</Page>
Vui lòng sử dụng SharedSizeGroup thay vì gắn với chiều rộng của cột khác! –
Tôi đã thử xaml ở trên trong XamlPad và nó cư xử kiểu lạ, nhưng tôi thấy quan điểm của bạn! Cảm ơn. –