我需要以编程方式添加一些用户界面。
为了做到这一点,我创建每个单个对象并将其添加到我的主网格中。
这样(我需要在 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 文件用作资源,请务必将其构建操作设置为内容。您还可以直接将带有 XAML 代码的字符串传递给 XamlReader.Load
函数。
关于c# - 在 Windows Phone 中以编程方式添加 XAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753042/