2012-02-27 24 views
12

Làm cách nào để xây dựng đoạn XAML này theo chương trình?Áp dụng Kích thước Lưới Sao ở mã sau

<Grid Name="gridMarkets"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="10" /> 
     <RowDefinition Height="*" MinHeight="16" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="10" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
</Grid> 

Đây có phải là giải pháp thanh lịch để phân tích cú pháp và tạo điều khiển động không?

Tôi đã cố gắng để làm một cái gì đó:

RowDefinition newRow = new RowDefinition(); 
newRow.Height = new GridLength(10); 
newGrid.RowDefinitions.Add(newRow); 

Nhưng làm thế nào để tôi chỉ định một dấu hiệu *?

Tìm kiếm bất kỳ loại ý tưởng nào cho vấn đề này! Cảm ơn!

+0

có thể trùng lặp với [Grid Star-Size in code behind] (http://stackoverflow.com/questions/5459595/grid-star-size-in -code-behind) –

Trả lời

30

Bạn có thể sử dụng các loại Grid.Star đơn vị

newRow.Height = new GridLength(1, GridUnitType.Star); 

Bạn cũng có thể sử dụng đối tượng XamlReader để chuyển đổi chuỗi XAML thành các đối tượng giao diện người dùng từ mã-đằng sau, mặc dù tôi thường thích tự tạo các đối tượng như thế nào bạn đang tạo chúng.

+0

Cảm ơn! Nhưng tại sao 1 của nó? không phải là Zero? –

+0

Nếu bạn muốn một ngôi sao, sau đó bạn cần phải xác định bạn muốn một ngôi sao, không phải số không. Nếu bạn không biết, bạn cũng có thể sử dụng nhiều hơn một sao trong XAML: ví dụ: 'Chiều cao =" 2 * "'. – svick

+3

@WildGoat Đơn vị mặc định là khi bạn sử dụng 'Height =" * "' là 1. Điều này có nghĩa là hàng sẽ chiếm một lượng không gian bằng nhau với tất cả các hàng có kích thước ngôi sao khác. Ví dụ: nếu bạn có 2 hàng mà cả hai đều có 'Height =" * "', cả hai hàng sẽ chiếm một lượng không gian bằng nhau. Nếu hàng đầu tiên có 'Height =" 2 * "', thì nó sẽ gấp đôi kích thước của hàng thứ 2. Nếu Row1 có 'Height =" 2 * "' và Row2 có 'Height =" 3 * "', thì hàng thứ nhất sẽ chiếm 2/5 không gian sẵn có và hàng thứ 2 sẽ chiếm 3/5. – Rachel

7

Dưới đây là một số ví dụ:

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(10)}); 
grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star), MinHeight = 16}); 

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star)}); 
grid.RowDefinitions.Add(new RowDefinition {Height = GridLength.Auto}); 

và tương tự cho các cột.

5

Sử dụng công cụ xây dựng GridLength cho phép bạn chỉ định GridUnitType là phương pháp phù hợp tại đây, như những người khác được đề xuất.

Nhưng nếu vì một lý do, bạn muốn thực sự chuyển đổi giá trị chuỗi đúng loại giống như cách nó được thực hiện trong XAML, bạn có thể làm điều đó quá:

Nhìn vào loại GridLength: nó đã được xác định thuộc tính TypeConverter với tham số typeof(GridLengthConverter). Điều này có nghĩa là bạn có thể sử dụng loại đó để thực hiện chuyển đổi:

new GridLengthConverter().ConvertFromString("*") 
+0

hoạt động cho WPF, nhưng không hoạt động đối với UWP hoặc WinRT –

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