C# 通过C实现动态XAML#

C# 通过C实现动态XAML#,c#,silverlight,visual-studio-2010,xaml,windows-phone-7,C#,Silverlight,Visual Studio 2010,Xaml,Windows Phone 7,我是WP7应用程序开发领域的新手。不久前,我发现了一段视频,显示了如何做类似的事情,但现在找不到了 本质上,我希望根据用户的选择更改XAML页面的内容。举个简单的例子,可能有五个编号为1-5的按钮。单击任何一个都会在页面上创建那么多文本框。那么,有没有一种方法可以指示事件处理程序中的按钮将一些XAML代码粘贴到页面上?这与HTML中的CSS工作表类似吗?非常感谢您抽出时间,帮助我回答这个问题!甚至给我指出一个教程或我可以用谷歌搜索的方法的名称都会很有帮助。你不会真的“粘贴”到你的XAML文件中,

我是WP7应用程序开发领域的新手。不久前,我发现了一段视频,显示了如何做类似的事情,但现在找不到了

本质上,我希望根据用户的选择更改XAML页面的内容。举个简单的例子,可能有五个编号为1-5的按钮。单击任何一个都会在页面上创建那么多文本框。那么,有没有一种方法可以指示事件处理程序中的按钮将一些XAML代码粘贴到页面上?这与HTML中的CSS工作表类似吗?非常感谢您抽出时间,帮助我回答这个问题!甚至给我指出一个教程或我可以用谷歌搜索的方法的名称都会很有帮助。

你不会真的“粘贴”到你的XAML文件中,你的按钮处理程序中有C代码,可以动态地将文本框控件添加到XAML中定义的面板中

MainWindow.xaml

<phone:PhoneApplicationPage x:Class="WindowsPhoneApplication2.MainPage"
                            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                            xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
                            xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
                            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                            mc:Ignorable="d"
                            d:DesignWidth="480"
                            d:DesignHeight="768"
                            FontFamily="{StaticResource PhoneFontFamilyNormal}"
                            FontSize="{StaticResource PhoneFontSizeNormal}"
                            Foreground="{StaticResource PhoneForegroundBrush}"
                            SupportedOrientations="Portrait"
                            Orientation="Portrait"
                            shell:SystemTray.IsVisible="True">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot"
          Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel"
                    Grid.Row="0"
                    Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle"
                       Text="MY APPLICATION"
                       Style="{StaticResource PhoneTextNormalStyle}" />
            <TextBlock x:Name="PageTitle"
                       Text="page name"
                       Margin="9,-7,0,0"
                       Style="{StaticResource PhoneTextTitle1Style}" />
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel"
              Grid.Row="1"
              Margin="12,0,12,0">
            <StackPanel>
                <Button Click="Button_Click"
                        Content="1" />
                <Button Click="Button_Click"
                        Content="2" />
                <Button Click="Button_Click"
                        Content="3" />
                <Button Click="Button_Click"
                        Content="4" />
                <Button Click="Button_Click"
                        Content="5" />
                <StackPanel x:Name="DynamicPanel">
                </StackPanel>
            </StackPanel>
        </Grid>
    </Grid>
</phone:PhoneApplicationPage>

MainWindow.cs:

using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Phone.Controls;

namespace WindowsPhoneApplication2 {
    public partial class MainPage : PhoneApplicationPage {
        // Constructor
        public MainPage() {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e) {
            int numBoxes = Int32.Parse(((Button) sender).Content.ToString());
            DynamicPanel.Children.Clear();
            for (int i = 0; i < numBoxes; i++) {
                var newTextBlock = new TextBlock { Name = "textBlock" + i.ToString(), Text = "Hello!" };
                DynamicPanel.Children.Add(newTextBlock);
            }
        }
    }
}
使用系统;
使用System.Windows;
使用System.Windows.Controls;
使用Microsoft.Phone.Controls;
命名空间WindowsPhoneApplication2{
公共部分类主页:PhoneApplicationPage{
//建造师
公共主页(){
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e){
int numBoxes=Int32.Parse(((按钮)sender.Content.ToString());
DynamicPanel.Children.Clear();
for(int i=0;i
正如Wayne指出的,在许多情况下,在运行时用C#生成控件是很简单的

或者,如果您确实想研究在运行时生成XAML,下面是Pete Brown的一篇文章,它将帮助您开始


是的,“粘贴”在很大程度上过于简化了过程。与其插入动态生成的代码块,不如说我想利用自己编写的特定代码块。因此,如果我想在点击按钮事件中输入,我将如何在代码隐藏文件中对其进行编码?已更新。了解XAML本身只是一种创建和组合对象的声明性方式。在XAML中可以做的任何事情都可以在代码中完成(在一定程度上,反之亦然)。