0

嗨,我想编写一个游戏应用程序,因此我有三个用户控件,每个用户控件都有多个按钮。说 Usercontrol1 有 5 个按钮 Usercontrol2 有 6 个按钮等等......

现在在 MainPage.xaml 我有一个名为 GameCanvas 的画布,在运行时取决于难度级别,我正在填充一个用户控件,然后在下一个级别中填充另一个,依此类推,GameCanvas.Children.Add(uc1);等等。

现在在 MainPage 我有一个 listofValues

List<int> listValues = new List<int>(); 

在构造函数中我正在填写,所以第一次listOfValues保存 5 个数字,这 5 个数字我想显示为userControl1.

在下一个级别中,我将生成 6 个数字listOfNumbers并希望向用户显示 UserControl2,并将 6 个 Buttons 内容填充为这 6 个数字。知道我该怎么做吗?

在构造函数中GamePage

我创造了

uc1 = new userControl1();
uc2= new userControl12();

当我第一次加载时在构造函数中

GameCanvas.Children.Add(uc1);

我将按钮内容作为空值。但是如何用 GamePage 的 listValues 的值填充Buttons内容呢?UserControl1

4

1 回答 1

0

我找到了我在这个问题中提出的问题的解决方案。我研究了一些东西,并从一位微软技术人员那里获得了帮助,并对我的问题实施了同样的方法。由于代码的隐私问题,我将简要说明我如何解决该问题。

我的问题是一个 MainPage.xaml 页面另一个 userControl1.xaml 页面,用户控件有一些按钮,按钮的内容将是一些在 MainPage.xaml.cs 中生成的 listValues

现在在用户控件中我写了一个代码

<Grid>
    <Button Content="{Binding Path=ListOfValues[0]}" Margin="109,140,101,109" />
    <Button Content="{Binding Path=ListOfValues[1]}" Margin="18,86,212,162"   />
    <Button Content="{Binding Path=ListOfValues[2]}" Margin="218,206,12,43"   />
</Grid>

和 UserControl DataContext 作为

<UserControl.DataContext>
    <local:MainWindow  />
</UserControl.DataContext>

其中“本地”是您的应用程序名称。UserControl 中不会有任何代码。

现在在 MainPage.xaml

<Grid Loaded="Grid_Loaded" >
    <Canvas x:Name="GameCanvas" Margin="12,52,98,26" />
</Grid>

而在代码后面部分,这部分很重要。

首先定义一个属性

public List<int> ListOfValues
{
   //with get, set and INotifyPropertyChanged implemented.
}

在 MainPage 的构造函数中写

public MainPage()
    {
        InitializeComponent();
        this.DataContext = this;
    }

而在 MainPage_Loaded 代码后面

        private void Grid_Loaded(object sender, RoutedEventArgs e)
    {
        _listofValues.Add(1);
        _listofValues.Add(2);
        _listofValues.Add(3);

        var uc1 = new UserControl1(); // 
        uc1.DataContext = this;
        GameCanvas.Children.Add(uc1);
    }

运行应用程序。可以看到所有按钮 Content 的顺序都是 ListOfValues 。

这是一个简单的应用程序,没有 MVVM,所以如果使用命令绑定实现 MVVM 并编写更新的答案,任何人都会很好。希望它能帮助许多有类似要求的用户。

于 2013-09-17T06:47:14.467 回答