在 Windows Phone 中以编程方式添加 XAML

Add XAML programmatically in Windows Phone

我需要以编程方式添加一些 UI。

为了做到这一点,我创建了每个对象并将其添加到我的主网格中。

这样(我需要在 lambda 函数中这样做):

        Deployment.Current.Dispatcher.BeginInvoke(() => {
            StackPanel stkpanel = new StackPanel();
            stkpanel.Orientation = Orientation.Horizontal;
             TextBlock textBlock = new TextBlock();
            textBlock.Text = "text1";
            Grid myGrid = new Grid();
            myGrid.Children.Add(textBlock);

            MainPage currentPage = (MainPage)(((App)Application.Current).RootFrame.Content as PhoneApplicationPage);
            currentPage.LayoutRoot.Children.Add(myGrid);
 ...
});

有没有办法向我的 MainPage.xaml 添加另一个 File.xaml 并显示结果?

我正在使用 silverlight 8.1

谢谢

有一些不同的方法可以做到这一点。

用户控件

一种方法是创建一个用户控件并直接在 XAML 中使用它,或者像标准控件一样在后面的代码中实例化它。您可以在 Visual Studio.

添加项目 对话框中找到模板

页数

也可以创建第二个页面并将它们显示在 Frame 标记中。在 XAML 和代码隐藏中是可能的。这是一个例子:

<Frame Margin="0,148,0,0" Name="myFrame"/>

myFrame.Navigate(typeof(BlankPage1));

XamlReader

如果您有部分 XAML 代码,存储在文件中,您可以手动解析它并将对象添加到页面。您的 XAML 必须如下所示,带有 xmlns 属性

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Button Content="BTN 1" />
    <Button Content="BTN 2" />
    <Button Content="BTN 3" />
</StackPanel>

然后你可以用XamlReader解析它:

var uri = new Uri("ms-appx:///test.xaml");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);

var panel = XamlReader.Load(await FileIO.ReadTextAsync(file)) as StackPanel;
root.Children.Add(panel);

确保将 XAML 文件的 Build Action 设置为 Content,如果您将其用作资源。您也可以直接将带有 XAML 代码的字符串传递给 XamlReader.Load 函数。