2010-02-09 59 views
20

Tôi có, trong một cửa sổ, Grid có chứa RadioButton, một TextBoxButton, mỗi cột trong cột 0, 1, 2 tương ứng. Tất cả đều có chiều cao của họ được thiết lập để tự động.WPF: Ràng buộc chiều cao của một thành phần với một thành phần khác là

Sau đó, trong một phần khác của cửa sổ, tôi có một Grid với một Label, một TextBoxButton, trong cột 0, 1, và 2. Heights cũng được thiết lập để tự động.

Vấn đề tôi có là chiều cao của lưới đầu tiên nhỏ hơn chiều cao của lưới thứ hai. Tôi đoán đó là vì Label đang buộc cái thứ hai cao hơn. Làm thế nào tôi có thể làm cho nó để lưới đầu tiên là cao như thứ hai? Tôi đã thử làm điều này:

Đặt tên hộp văn bản trong lưới thứ hai SomeName.
Trong các <Grid.ColumnDeclarations> của lưới đầu tiên, tôi đã thay đổi chiều cao từ "tự động" thành "{Binding ElementName = SomeName, Path = Height}".

Nhưng điều đó không làm những gì tôi muốn. Kích thước là như nhau. Tôi đoán Binding là về cơ bản nhận được "tự động" và ném nó ở đó, mà kết thúc lên được điều tương tự.

Ngoài ra, tôi đang tìm một giải pháp không liên quan đến việc đặt độ cao thành giá trị cố định.

Trả lời

9

Đặt hai lưới trong một shared size scope, và sử dụng SharedSizeGroup khóa chiều cao dòng với nhau:

<SomeContainer Grid.IsSharedSizeScope="True"> <!-- Could be the Window or some more nearby Panel --> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <Label Grid.Row="0" /> 
    </Grid> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <RadioButton Grid.Row="0" /> 
    </Grid> 
</SomeContainer> 

Xem thêm How to: Share sizing properties between grids trong MSDN.

35

Bind đến ActualHeight chứ không phải là Height tài sản:

<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" /> 
+0

Điều đó không có tác dụng. Cách duy nhất tôi có nó để làm việc là thêm một nhãn và giấu nó. Argh. – zxcvbnm

+0

Tò mò. Tôi đã thử nghiệm nó trước khi đăng bài, mặc dù với một TextBlock hơn là một TextBox. Có lẽ một vấn đề với lợi nhuận được thêm vào bởi lưới (Tôi muốn liên kết với ActualHeight của RowDefinition khác để tránh vấn đề này, nhưng điều đó không làm việc). – itowlson

+1

Đây thực sự là câu trả lời đúng. – Cogent

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