xaml 短语的 C# 等效代码

Posted

技术标签:

【中文标题】xaml 短语的 C# 等效代码【英文标题】:C# Equivalent code for xaml phrases 【发布时间】:2017-12-18 09:38:36 【问题描述】:

我还需要在我的 C# 代码中动态添加一些控制单元,例如 GridCheckboxTextblock 和 ...。

假设 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 属性的类型是BrushMargin 属性的类型是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:事件和委托变量使用动词或形容词短语命名

C# LINQ 中的多短语搜索无法转换为 SQL

字符串短语以空格结尾?

用于文本分析的算法或库,特别是:主要词、跨文本的短语和文本集合

使用 R TM 包查找 2 和 3 词短语

基本 Python 代码:将短语转换为相应的首字母缩写词 [重复]