C#wpf无法创建对象数组

时间:2015-09-16 07:14:08

标签: c# wpf xaml

我正在尝试重新创建10. Instantiate a class in XAML

以下是示例中的Xaml片段: -

   <Grid.Resources>
        <!-- Create a array of Person objects -->
        <x:Array x:Key="Office" Type="{x:Type local:Person}">
            <!-- Instantiate a Person and add to the array -->
            <local:Person Name="Michael" Age="40"/>
            <local:Person Name="Jim" Age="30"/>
            <local:Person Name="Dwight" Age="30"/>
        </x:Array>
    </Grid.Resources>

以下是代码隐藏代码段: -

 public class Person {
        public string Name { get; set; }
        public int Age { get; set; }
    }

我已经开始用这个Xaml创建一个Visual Studio C#WPF 2015项目: -

<Window x:Class="AdvFlow1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AdvFlow1"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
    <Grid.Resources>
        <!-- Create a array of Person objects -->
        <x:Array x:Key="Office" Type="{x:Type local:Person}">
            <!-- Instantiate a Person and add to the array -->
            <local:Person Name="Michael" Age="40"/>
            <local:Person Name="Jim" Age="30"/>
            <local:Person Name="Dwight" Age="30"/>
        </x:Array>
    </Grid.Resources>
    </Grid>
</Window>

和这个代码隐藏: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace AdvFlow1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
}

我从Type="{x:Type local:Person}"收到错误“名称”Person“在命名空间”clr-namespace:AdvFlow1“中不存在。

我是新手,但已经没有头发了。

谢谢, 保罗。

4 个答案:

答案 0 :(得分:5)

在你的代码中,Person实际上是MainWindow类中的嵌套类型。我建议将Person移动到名称空间块中。

答案 1 :(得分:2)

不要将Person作为嵌套类。嵌套类只能在Type

中使用
 <x:Array x:Key="Office" Type="{x:Type local:MainWindow+Person}">

但是要创建一个实例,你必须把它拿出来。

namespace AdvFlow1
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

答案 2 :(得分:0)

感谢@ user2184057和其他所有人的评论。这解决了它: -

namespace AdvFlow1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

答案 3 :(得分:0)

我建议你添加另一个班级。我个人更喜欢在编码中添加这些东西而不是XAML。

public class Person
{
    string Name { get; set; }
    int Age { get; set; }
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

并添加

之类的行
 public void Initialize_Persons()
 {
   new Person("John Doe", 34);
   //...
 }

希望它可以帮助你解决问题。