【问题标题】:Windows Phone 8 App Dynamically/programmatically create buttons in g grid/PanelWindows Phone 8 App 在网格/面板中动态/编程创建按钮
【发布时间】:2013-12-18 13:13:54
【问题描述】:

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

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

http://www.4shared.com/photo/Hu1FVCdn/wp8.html

我在左侧有一个网格视图,上面有按钮。(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# 文件)然后这项工作将以编程方式完成..

我做到了,但它只显示一个按钮..不是所有按钮..? 可能是位置问题..??

这是我的 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.
}

我的结果如何变得像我的快照......但是动态/编程。 请指导我解决这个问题..提前谢谢..!

【问题讨论】:

    标签: c# wpf xaml windows-phone-8


    【解决方案1】:

    Jahind 的答案是很好的解决方案,但我认为有一点错误,你需要在循环之后将面板添加到网格中,这样应该可以工作:

        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.
            });
        } 
    

    【讨论】:

      【解决方案2】:

      您的代码在按钮创建中似乎没问题。您的代码完全创建了 5 个按钮并添加到网格中,但唯一的问题是您将所有按钮放在网格内的一个位置。 这是解决方案 1. 如果您想用作父容器,请设置每个按钮的边距。 2.创建一个方向垂直的stackpanel,先将button添加到stackpanel,然后将stackpanel添加到grid中。

      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.
               });
          }
      

      【讨论】:

      • 兄弟没有显示错误..但是在项目启动后,我点击了交易按钮,然后突然中断/继续选项出现......所以没有显示正确的结果..?
      • System.Windows.ni.dll 中发生了“System.InvalidOperationException”类型的异常,但未在用户代码中处理如果有此异常的处理程序,则程序可以安全地继续。
      • Jaihind 亲爱的,当我注释掉 grid.children.add(panel) 然后单击成为可能...并且没有结果显示...可能 b 在后台显示结果..但不是前面..??
      • kidOfDeath 是的,你是对的,我做了更改 @user3061129 看看。这行得通
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多