我还需要在我的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#代码?
答案 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
属性的类型为Brush
。 Margin
属性的类型为Thickness
。您可以通过查看MSDN上的documentation确认这一点。
XAML处理器能够将字符串“Black”翻译为Brush
,将值“68,41,0,0”翻译为Thickness
。 C#编译器不是。除此之外,您要设置完全相同类的完全相同的属性。