WPF运行时控件创建

xyz*_*xyz 2 .net wpf

是否有完整的运行时创建WPF控件的好教程?

谢谢

Vla*_*lad 5

没有我知道的这样的教程,部分原因是如果你已经为控件提供了XAML定义,这是非常简单的.

XAML代码和相应的C#代码之间的对应关系很简单.

例:

<Button Height="80" Width="150">Test</Button>
Run Code Online (Sandbox Code Playgroud)

进入;陷入;习惯于

Button button = new Button() { Height = 80, Width = 150, Content = "Test" };
parentControl.Add(button);
Run Code Online (Sandbox Code Playgroud)

你应该知道的事情:

  1. 内容模型:内容(开始标记和结束标记之间的代码)在哪里?它可以是属性Content(如在Button案例中),也可以是一组子项(如果情况下Grid).
  2. 在XAML中,有时会隐式应用特殊值转换器; 在C#代码中,你必须自己做.例:

    <Button Margin="1, 2"/>
    
    Run Code Online (Sandbox Code Playgroud)

    变成

    Button button = new Button() { Margin = new Thickness(1, 2, 1, 2) };
    
    Run Code Online (Sandbox Code Playgroud)
  3. 每个UI元素只能有一个父元素.也就是说,您不能将同一元素作为子项添加到两个不同的父级.

  4. 绑定以一种非常特殊的方式定义:

    <Label MaxWidth={Binding ActualWidth, Source={Binding ElementName=Container}}>
    
    Run Code Online (Sandbox Code Playgroud)

    进入;陷入;习惯于

    Label label = new Label();
    label.SetBinding(
        Label.MaxWidthProperty,
        new Binding("ActualWidth") { Source = Container }
    );
    
    Run Code Online (Sandbox Code Playgroud)

    (最好Container通过实际参考而不是名称来引用).

  5. 附加属性的语法也不简单:

    <Label Grid.Column="1"/>
    
    Run Code Online (Sandbox Code Playgroud)

    变成

    Label label = new Label();
    Grid.SetColumn(label, 1);
    
    Run Code Online (Sandbox Code Playgroud)

请注意,对于每个构造/属性,您可以在MSDN中查找在XAML和C#中表达它的确切方式,通常直接在描述您正在寻找的概念的文章中.