2017-07-13 124 views
-2

我还需要在我的C#代码中动态添加一些控制单元,例如GridCheckbox,Textblock和...。C#xaml短语的等效代码

假设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#代码?

+1

[背景](https://stackoverflow.com/q/979876/1997232)等... – Sinatr

+0

为什么在代码中并没有使用动态xaml模板?更简单,更清洁 –

+0

不清楚“XAML解析器如何将短语映射到C#代码”是什么意思。 – Nkosi

回答

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))] 

如果你看看这个类型(在PresentationFramework.dll)与例如dotPeek,你会发现ConvertFrom(...)ConvertTo(...)方法,照顾转换。内部方法FromString(...)包含此示例的相关部分。

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

作为一个例子,我应该写在我的c#中来创建一个像这样的复选框?

或多或少相同。 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#编译器不是。除此之外,您正在设置完全相同的类的完全相同的属性。