.net 为什么WPF网格对行和列使用附加属性?
在WPF中,如果我想使用网格布局,我需要设置行和列定义.net 为什么WPF网格对行和列使用附加属性?,.net,wpf,.net,Wpf,在WPF中,如果我想使用网格布局,我需要设置行和列定义 <Grid> <Grid.RowDefinitions> <RowDefinition Height="100" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDe
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- Cell data goes here -->
</Grid>
这至少造成了两个我能想到的问题:
Grid.row
<table>
<tr><td>Name:</td><td>John</td></tr>
<tr><td>Age:</td><td>15</td></tr>
</table>
姓名:约翰
年龄:15
在HTML中,上述场景非常容易处理。您可以通过以下方式插入新行。。。插入它:
<table>
<tr><td>Title:</td><td>Mr.</td></tr> <!-- insert win -->
<tr><td>Name:</td><td>John</td></tr>
<tr><td>Age:</td><td>15</td></tr>
</table>
标题:李先生。
姓名:约翰
年龄:15
…并在…旁边删除一行。。。删除它:
<table>
<tr><td>Title:</td><td>Mr.</td></tr> <!-- insert win -->
<tr><td>Name:</td><td>John</td></tr>
<!-- no more age! and it doesn't take up space any more either -->
</table>
标题:李先生。
姓名:约翰
我非常清楚WPF与HTML有很大的不同。为什么WPF设计者采用这种方法?有什么方法可以解决上述问题吗?这确实是一件非常烦人的事情 在需要将项目一个堆叠在另一个之下的场景中,我只使用StackPanel。 但如果您真的想要网格功能,有一个非常简洁的解决方案: 使用“自动栅格ID”可以定义行数和列数,添加到栅格的每个图元都会自动指定一个行值和列值:
<AutoGrid RowCount="2" RowHeight="35" Columns="100,auto">
<Label />
<TextBox />
<Label />
<TextBox />
</AutoGrid>
与AutoGrid不同的是,
,它实际上包含在框架中。这确实是一件非常烦人的事情
在需要将项目一个堆叠在另一个之下的场景中,我只使用StackPanel。
但如果您真的想要网格功能,有一个非常简洁的解决方案:
使用“自动栅格ID”可以定义行数和列数,添加到栅格的每个图元都会自动指定一个行值和列值:
<AutoGrid RowCount="2" RowHeight="35" Columns="100,auto">
<Label />
<TextBox />
<Label />
<TextBox />
</AutoGrid>
与AutoGrid不同的是,,它实际上包含在框架中。这只是为了更多规范而权衡权力的另一个例子。您可以在WPF中对网格进行更多的控制,但代价是必须指定更多的属性。您不需要在HTML中指定太多内容,因为它会假设您将如何使用该标记,这可能是好的,也可能是坏的。如果我不希望所有行在默认情况下具有相同的高度,该怎么办?在HTML中声明“星形符号”会有多困难
然而,我不认为这有你想象的那么不同。为了动态隐藏该HTML
行,您必须将显示设置为无
,在WPF中,您必须将可见性设置为折叠
,并更改行定义
的高度
设计师采用这种方法的原因是,它确实允许更大的灵活性-Grid
主要是一个布局管理器,而不是一个表显示。attached properties方法提供了(同样是以必须指定更多属性为代价的)更多的控制,这对于布局管理器来说很重要(尽管如果您曾经使用过GUI,它们有时会让您感到痛苦)
此外,为了向网格动态添加行以显示数据,您可能不会使用网格
,而是数据网格
。您还可以使用UniformGrid
,它类似于HTML的表(尽管它仍然是一个布局管理器)。还有一个表
类。这只是另一个为了更多规范而权衡权力的例子。您可以在WPF中对网格进行更多的控制,但代价是必须指定更多的属性。您不需要在HTML中指定太多内容,因为它会假设您将如何使用该标记,这可能是好的,也可能是坏的。如果我不希望所有行在默认情况下具有相同的高度,该怎么办?在HTML中声明“星形符号”会有多困难
然而,我不认为这有你想象的那么不同。为了动态隐藏该HTML
行,您必须将显示设置为无
,在WPF中,您必须将可见性设置为折叠
,并更改行定义
的高度
设计师采用这种方法的原因是,它确实允许更大的灵活性-Grid
主要是一个布局管理器,而不是一个表显示。attached properties方法提供了(同样是以必须指定更多属性为代价的)更多的控制,这对于布局管理器来说很重要(尽管如果您曾经使用过GUI,它们有时会让您感到痛苦)
此外,为了向网格动态添加行以显示数据,您可能不会使用网格
,而是数据网格
。您还可以使用UniformGrid
,它类似于HTML的表(尽管它仍然是一个布局管理器)。还有一个表
类。如果不使用附加属性,如何设置行和列值?您的示例无效,因为XAML远离HTML。您刚刚在单元格中添加了一个字符串
,但实际上在XAML中,你可以在每个单元格中添加几百行,因此你很快就会在所有单元格内容中丢失网格定义。就像HTML那样-使用行和单元格容器。HTML表格不是主要是数据表示控件而不是布局控件吗?那么更合适的比较将是DataGrid,而不是Grid。我曾经用WPF制作桌面应用程序。现在,我几乎只制作web应用程序。看到有人抱怨网格的工作方式与HTML表格不同,我感到很痛苦。在我看来,HTML中可用的布局选项与WPF相比是可怜的。W