C# Windows Phone 8应用程序在g网格/面板中动态/以编程方式创建按钮

C# Windows Phone 8应用程序在g网格/面板中动态/以编程方式创建按钮,c#,wpf,xaml,windows-phone-8,C#,Wpf,Xaml,Windows Phone 8,我在windows phone 8应用程序中动态创建按钮时遇到问题 我可以在我的Xaml文件中创建这些按钮,但不能以编程方式。。。 这是该文件的快照 我在左边有一个网格视图,上面有按钮。1,2,3,4,5。。 我在Xaml文件中制作了这些按钮。不是通过程序 单击“交易”按钮时,这些按钮应按“交易”按钮的处理程序以编程方式显示 这是我的Xaml代码 <Grid x:Name="grid" Height="618" Margin="6,147,0,0" Width="112" Hori

我在windows phone 8应用程序中动态创建按钮时遇到问题

我可以在我的Xaml文件中创建这些按钮,但不能以编程方式。。。 这是该文件的快照

我在左边有一个网格视图,上面有按钮。1,2,3,4,5。。 我在Xaml文件中制作了这些按钮。不是通过程序

单击“交易”按钮时,这些按钮应按“交易”按钮的处理程序以编程方式显示

这是我的Xaml代码

    <Grid x:Name="grid" Height="618" Margin="6,147,0,0" Width="112" HorizontalAlignment="Left" VerticalAlignment="Top">
        <Grid.Background>
            <ImageBrush Stretch="Fill" ImageSource="pannel.png"/>
        </Grid.Background>
        <Button x:Name="a" Content="1" HorizontalAlignment="Left" Margin="-7,-11,-11,563" VerticalAlignment="Bottom" Width="130" RenderTransformOrigin="0.636,0.638" Height="66" BorderThickness="0" d:IsHidden="True">
            <Button.Background>
                <ImageBrush Stretch="Fill" ImageSource="pannel_btn_unselected.png"/>
            </Button.Background>
        </Button>
        <Button x:Name="b" Content="2" HorizontalAlignment="Left" Margin="-7,0,-11,519" VerticalAlignment="Bottom" Width="130" RenderTransformOrigin="0.636,0.638" Height="66" BorderThickness="0" d:IsHidden="True">
            <Button.Background>
                <ImageBrush Stretch="Fill" ImageSource="pannel_btn_unselected.png"/>
            </Button.Background>
        </Button>
        <Button x:Name="c" Content="3" HorizontalAlignment="Left" Margin="-7,0,-11,475" VerticalAlignment="Bottom" Width="130" RenderTransformOrigin="0.636,0.638" Height="66" BorderThickness="0" d:IsHidden="True">
            <Button.Background>
                <ImageBrush Stretch="Fill" ImageSource="pannel_btn_unselected.png"/>
            </Button.Background>
        </Button>
        <Button x:Name="d" Content="4" HorizontalAlignment="Left" Margin="-7,0,-11,431" VerticalAlignment="Bottom" Width="130" RenderTransformOrigin="0.636,0.638" Height="66" BorderThickness="0" d:IsHidden="True">
            <Button.Background>
                <ImageBrush Stretch="Fill" ImageSource="pannel_btn_unselected.png"/>
            </Button.Background>
        </Button>
        <Button x:Name="e" Content="5" HorizontalAlignment="Left" Margin="-7,0,-11,387" VerticalAlignment="Bottom" Width="130" RenderTransformOrigin="0.636,0.638" Height="66" BorderThickness="0" d:IsHidden="True">
            <Button.Background>
                <ImageBrush Stretch="Fill" ImageSource="pannel_btn_unselected.png"/>
            </Button.Background>
        </Button>
    </Grid>
除了像这样创建..我只想在交易按钮处理程序中放置一个for循环C文件,然后这项工作将以编程方式完成

我做了,但它只显示一个按钮…不是所有的按钮。。? 5月b日地点问题

这是我的xaml.cs代码

 public main()
  {
    InitializeComponent();

  }
private void Button_Click(object sender, RoutedEventArgs e)
{
    NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
}
private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
{
           int i;
           for (i=0;i<5;i++)
             {
                Button btn = new Button() { Content = "Button" };
                btn.Width=130;
                btn.Height = 66;
                 grid.Children.Add(btn);
             }

    //       Grid.SetRow(control, i);
    //    Grid.SetColumn(control, j);
    // TODO: Add event handler implementation here.
}
我的结果如何变得像快照…但以动态/编程方式。
请为我解答这个问题。。提前谢谢

您的代码似乎正常,按钮创建没有问题。您的代码准确地创建了5个按钮并添加到网格中,但唯一的问题是您将所有按钮放在网格中的一个位置。 这是解决办法 1.如果要用作父容器,请设置每个按钮的边距。 2.创建一个方向垂直的stackpanel,首先将按钮添加到stackpanel中,然后将stackpanel添加到网格中

private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
    {   Dispatcher.BeginInvoke(() => {         
         StackPanel panel = new StackPanel();
         panel.Orientation = System.Windows.Controls.Orientation.Vertical;
               int i;
               for (i=0;i<5;i++)
                 {
                    Button btn = new Button() { Content = "Button" };
                    btn.Width=130;
                    btn.Height = 66;
                   // btn.Margin = new Thickness(0,0,0,0)//try this if you use grid
                    //grid.Children.Add(btn);
                 panel.Children.Add(btn);
                 }
            grid.Children.Add(panel);
        //       Grid.SetRow(control, i);
        //    Grid.SetColumn(control, j);
        // TODO: Add event handler implementation here.
         });
    }

您的代码似乎还可以,在创建按钮时没有问题。您的代码准确地创建了5个按钮并添加到网格中,但唯一的问题是您将所有按钮放在网格中的一个位置。 这是解决办法 1.如果要用作父容器,请设置每个按钮的边距。 2.创建一个方向垂直的stackpanel,首先将按钮添加到stackpanel中,然后将stackpanel添加到网格中

private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
    {   Dispatcher.BeginInvoke(() => {         
         StackPanel panel = new StackPanel();
         panel.Orientation = System.Windows.Controls.Orientation.Vertical;
               int i;
               for (i=0;i<5;i++)
                 {
                    Button btn = new Button() { Content = "Button" };
                    btn.Width=130;
                    btn.Height = 66;
                   // btn.Margin = new Thickness(0,0,0,0)//try this if you use grid
                    //grid.Children.Add(btn);
                 panel.Children.Add(btn);
                 }
            grid.Children.Add(panel);
        //       Grid.SetRow(control, i);
        //    Grid.SetColumn(control, j);
        // TODO: Add event handler implementation here.
         });
    }

Jahind answer是一个很好的解决方案,但我认为没有什么错误,您需要在循环之后将面板添加到网格中,类似的操作应该可以工作:

    private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
    {   
        Dispatcher.BeginInvoke(() => {         
            StackPanel panel = new StackPanel();
            panel.Orientation = System.Windows.Controls.Orientation.Vertical;
            int i;
            for (i=0;i<5;i++)
            {
                Button btn = new Button() { Content = "Button" };
                btn.Width=130;
                btn.Height = 66;
                // btn.Margin = new Thickness(0,0,0,0)//try this if you use grid
                //grid.Children.Add(btn);
                panel.Children.Add(btn);
            }

            grid.Children.Add(panel);

            //       Grid.SetRow(control, i);
            //    Grid.SetColumn(control, j);
            // TODO: Add event handler implementation here.
        });
    } 

Jahind answer是一个很好的解决方案,但我认为没有什么错误,您需要在循环之后将面板添加到网格中,类似的操作应该可以工作:

    private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
    {   
        Dispatcher.BeginInvoke(() => {         
            StackPanel panel = new StackPanel();
            panel.Orientation = System.Windows.Controls.Orientation.Vertical;
            int i;
            for (i=0;i<5;i++)
            {
                Button btn = new Button() { Content = "Button" };
                btn.Width=130;
                btn.Height = 66;
                // btn.Margin = new Thickness(0,0,0,0)//try this if you use grid
                //grid.Children.Add(btn);
                panel.Children.Add(btn);
            }

            grid.Children.Add(panel);

            //       Grid.SetRow(control, i);
            //    Grid.SetColumn(control, j);
            // TODO: Add event handler implementation here.
        });
    } 

Brother没有显示错误。但在项目启动之后,我单击了按钮trade,然后突然中断/继续选项出现…因此没有显示正确的结果。?System.Windows.ni.dll中出现了类型为“System.InvalidOperationException”的异常,但如果存在此异常的处理程序,则未在用户代码中处理,该程序可以安全地继续。Jaihind亲爱的,当我注释掉grid.children.addpanel后,单击“成为可能…”并没有结果显示….may b在后台显示结果..但不是在前面..kidOfDeath是的,你是对的,我做了更改@user3061129请看一看。这表明没有错误..但在项目启动之后,我单击了按钮交易,然后突然中断/继续选项出现…因此没有显示正确的结果..System.Windows.ni.dll中发生了类型为“System.InvalidOperationException”的异常,但如果存在此异常的处理程序,则未在用户代码中处理该异常,该程序可以安全地继续。Jaihind亲爱的,当我注释掉grid.children.addpanel后,单击“成为可能…”并没有结果显示….may b在后台显示结果..但不是在前面..kidOfDeath是的,你是对的,我做了更改@user3061129请看一看。这很有效