C# 如何避免行定义重复?
我有15-20行,其中一些不同,但大多数相似:C# 如何避免行定义重复?,c#,wpf,C#,Wpf,我有15-20行,其中一些不同,但大多数相似: <RowDefinition Height="Auto" /> 我想避免代码重复,因为它大约有10行,一行一行地进行。怎样才能做到呢 它可以在没有XAML的代码中完成,但我认为解决这个问题的方法是错误的。我认为不可能以某种方式简化网格行的声明,尤其是当并非所有网格行都将Height属性设置为“Auto”时。您可以尝试使用所演示的附加依赖项属性 请注意,此示例指定了网格行数,您可以看到它以编程方式设置了每行的Heig
<RowDefinition Height="Auto" />
我想避免代码重复,因为它大约有10行,一行一行地进行。怎样才能做到呢
它可以在没有XAML的代码中完成,但我认为解决这个问题的方法是错误的。我认为不可能以某种方式简化网格行的声明,尤其是当并非所有网格行都将Height属性设置为“Auto”时。您可以尝试使用所演示的附加依赖项属性 请注意,此示例指定了网格行数,您可以看到它以编程方式设置了每行的Height属性。您可能需要以更复杂的方式决定为每行指定的高度。 虽然这个解决方案在XAML中可能更美观,但它的实现可能更复杂,并且您可能很难为每一行指定适当的高度。 就个人而言,将每一行声明为VisualStudio将允许折叠标记和一个漂亮、清晰的方面似乎更容易
我希望这有帮助 我以前通过编写一个类解决了这个问题,该类提供了一个附加属性,可以根据简单的逗号分隔列表自动定义行和列。基本上,您需要做的是创建一个附加属性(我称之为
AutoRows
),并为属性更改后的元数据定义一个方法。该方法解析该值并简单地创建新的RowDefinition
元素
我使用了一种简单的语法,其中逗号分隔列表中的每个值都等于一行。因此,20,20,20
将创建3行高度20
。为了允许高度auto
的行并节省空间,我添加了一种新格式来定义块中的多个自动行。例如,20,~5,20
定义了高度20的行,然后是5个自动行,最后是另一个高度20的行
我的变更处理程序基本上是这样做的:
public static void AutoRowsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
RowDefinitionCollection rows = ((Grid)obj).RowDefinitions;
rows.Clear();
foreach (string segment in ((string)e.NewValue).Split(','))
{
if (segment.StartsWith("~"))
{
int count;
if (!int.TryParse(segment.Substring(1), out count))
count = 1;
for (int i = 0; i < count; i++)
rows.Add(new RowDefinition() { Height = GridLength.Auto });
}
else
{
GridLengthConverter converter = new GridLengthConverter();
rows.Add(new RowDefinition() { Height = (GridLength)converter.ConvertFromString(segment) });
}
}
}
public static void AutoRowsChanged(DependencyObject对象、DependencyPropertyChangedEventArgs e)
{
RowDefinitionCollection行=((网格)obj).RowDefinitions;
行。清除();
foreach(字符串段在((string)e.NewValue).Split(','))
{
if(带(“~”)的段开始)
{
整数计数;
如果(!int.TryParse(段子字符串(1),超出计数))
计数=1;
for(int i=0;i
我省略了几行代码,以确保正确解析,并且没有任何错误。如您所见,我使用GridLengthConverter
使每个非自动值接受正常RowDefinition
支持的任何值。因此,您可以轻松地用逗号连接所有行高度,并将其用作附加属性的值