我一直坚持这个问题,我在网上找到的所有内容似乎都是涉及带有ms-appx方案或baseURI的URI的相同代码的一小部分。然而,似乎没有任何作用。
基本上我有一个包含多个页面的UWP应用程序。当我导航到其中一个页面时,我想将应用程序的assets文件夹中的图像添加到此页面上的画布中。当我在XAML中执行此操作时,可以毫不费力地添加数字。
<Grid Name="basicGrid" >
<Grid.Background>
<ImageBrush ImageSource="/Assets/kamelenrace_background.png"
Stretch="UniformToFill"/>
</Grid.Background>
<Canvas Name="GameCanvas">
<Image Source="\Assets\kameel1.png"/>
</Canvas>
</Grid>
当我尝试在C#代码中添加数字时,没有任何作用(我试过的一个例子)
private Image player1 = new Image();
private Image player2 = new Image();
private bool singlePlayMode;
public CamelRacePage()
{
this.InitializeComponent();
BitmapImage p1 = new BitmapImage(new Uri("ms-appx:///Assets//kameel1.png"));
player1.Source = p1;
Canvas.SetLeft(player1, GameCanvas.Width / 2);
Canvas.SetTop(player1, GameCanvas.Width / 2);
GameCanvas.Children.Add(player1);
}
虽然我现在可以使用XAML使其工作,但我真的很想理解为什么C#代码不起作用。我还在学习......
任何帮助都会非常感激......
答案 0 :(得分:1)
我真的很想理解为什么C#代码不能正常工作
问题是由代码段设置Canvas.Left
和Canvas.Top
的值不正确引起的。由于您未为Height
设置Width
和GameCanvas
值,因此您将无法获得GameCanvas.Width
值。如果您调试代码段,则会发现值为NaN
,因此当Canvas.Left
和Canvas.Top
值为NaN
时,您无法看到Image
。
您可以删除代码段将起作用的两个代码行。或者,如果您想获得Width
的实际GameCanvas
,则应获得ActualWidth
属性。例如:
Canvas.SetLeft(player1, GameCanvas.ActualWidth / 2);
Canvas.SetTop(player1, GameCanvas.ActualHeight / 2);
GameCanvas.Children.Add(player1);
顺便说一句,使用XAML设置样式和布局会更好。