xaml 短语的 C# 等效代码
Posted
技术标签:
【中文标题】xaml 短语的 C# 等效代码【英文标题】:C# Equivalent code for xaml phrases 【发布时间】:2017-12-18 09:38:36 【问题描述】:我还需要在我的 C# 代码中动态添加一些控制单元,例如 Grid
、Checkbox
、Textblock
和 ...。
假设 XAML 节点如:
<CheckBox Content="CheckBox" Height="24" Click="CheckBoxes_Click"/>
它的 C# 等价物是
AddNewCheckBox()
CheckBox NewCheckBox = new CheckBox ();
NewCheckBox.Content = "CheckBox1";
NewCheckBox.Height = 24;
NewCheckBox.Click += CheckBoxes_Click;
但是有许多 XAML 分配很难理解它们的 C# 等效项。
例如,我应该在我的 c# 中写什么来创建这样的CheckBox
?
<CheckBox Content="CheckBox" Margin="68,41,0,0" Background="Black"
Height="Auto" Click="CheckBoxes_Click"/>
有什么方法可以理解 XAML 解析器如何将短语映射到 C# 代码?
【问题讨论】:
Background等... 为什么在代码中而不是在模板中使用动态 xaml?更简单,更清洁 不清楚how XAML parser maps phrases to C# code
是什么意思
Margin 属性是Thickness 类型,它有一个ThicknessConverter 类型的TypeConverter 集,这种类型知道如何“映射短语”。这是您在问题中所指的吗?
【参考方案1】:
例如,我应该在我的 c# 中写什么来创建这样的 CheckBox?
或多或少都一样。 XAML 中的每个属性都映射到 C# 中的一个属性。所以相当于:
CheckBox checkBox = new CheckBox();
checkBox.Content = "CheckBox";
checkBox.Margin = new Thickness(68,41,0,0);
checkBox.Background = Brushes.Black;
checkBox.Click += CheckBoxes_Click;
Background
属性的类型是Brush
。 Margin
属性的类型是Thickness
。您可以通过查看 MSDN 上的 documentation 来确认这一点。
XAML 处理器能够为您将字符串“Black”转换为Brush
,并将值“68,41,0,0”转换为Thickness
。 C# 编译器不是。除此之外,您正在设置完全相同的类的完全相同的属性。
【讨论】:
【参考方案2】:有什么方法可以理解 XAML 解析器如何将短语映射到 C# 代码?
看这个例子:
<CheckBox Content="CheckBox"
Margin="68,41,0,0"
Background="Black"
Height="Auto"
Click="CheckBoxes_Click"/>
如果我们想了解 XAML 解析器如何知道如何设置更复杂的属性(那些不能简单地使用类型的 TryParse()
方法的属性),我们需要查看属性的类型。
如果您查看 Margin
属性,例如,它的类型是 Thickness
,如果您查看该类型,您会发现此属性:
[TypeConverter(typeof(ThicknessConverter))]
如果您使用例如 dotPeek 查看该类型(在 PresentationFramework.dll 中),您会发现负责转换的 ConvertFrom(...)
和 ConvertTo(...)
方法。内部方法FromString(...)
包含此示例的相关部分。
【讨论】:
【参考方案3】:我应该在我的 c# 中写什么来创建这样的复选框?
<CheckBox Content="CheckBox"
Margin="68,41,0,0"
Background="Black"
Height="Auto"
Click="CheckBoxes_Click"/>
以上等价于
var checkBox = new CheckBox ()
Content = "CheckBox",
Margin = new Thickness(64, 41, 0, 0),
Background = Brushes.Black,
Height = Double.NaN
;
checkBox.Click += CheckBoxes_Click
【讨论】:
【参考方案4】:要创建这样的复选框,你应该这样写:
AddNewCheckBox()
CheckBox NewCheckBox = new CheckBox ();
NewCheckBox.Content = "CheckBox1";
NewCheckBox.Height = 24;
NewCheckBox.Click += NewCheckBox_Click;
NewCheckBox.Margin = new Thickness(64, 41, 0, 0);
NewCheckBox.Background = new SolidColorBrush(Color.Black);
//or like this: NewCheckBox.Background = Brushes.Black;
【讨论】:
以上是关于xaml 短语的 C# 等效代码的主要内容,如果未能解决你的问题,请参考以下文章
编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名