我正在尝试重新创建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“中不存在。
我是新手,但已经没有头发了。
谢谢, 保罗。
答案 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);
//...
}
希望它可以帮助你解决问题。