C#xaml短语的等效代码

时间:2017-07-13 14:20:52

标签: c# wpf xaml

我还需要在我的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#代码?

4 个答案:

答案 0 :(得分: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(...)包含此示例的相关部分。

答案 1 :(得分:0)

要创建这样的复选框,您应该像这样写:

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;
}

答案 2 :(得分:0)

  

我应该在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 

答案 3 :(得分:0)

  

作为一个例子,我应该在我的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#编译器不是。除此之外,您要设置完全相同类的完全相同的属性。