ms-appx不适用于uwp assets文件夹中的图像

时间:2017-12-29 19:22:25

标签: c# xaml uwp

我一直坚持这个问题,我在网上找到的所有内容似乎都是涉及带有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#代码不起作用。我还在学习......

任何帮助都会非常感激......

1 个答案:

答案 0 :(得分:1)

  

我真的很想理解为什么C#代码不能正常工作

问题是由代码段设置Canvas.LeftCanvas.Top的值不正确引起的。由于您未为Height设置WidthGameCanvas值,因此您将无法获得GameCanvas.Width值。如果您调试代码段,则会发现值为NaN,因此当Canvas.LeftCanvas.Top值为NaN时,您无法看到Image

您可以删除代码段将起作用的两个代码行。或者,如果您想获得Width的实际GameCanvas,则应获得ActualWidth属性。例如:

Canvas.SetLeft(player1, GameCanvas.ActualWidth / 2);
Canvas.SetTop(player1, GameCanvas.ActualHeight / 2);
GameCanvas.Children.Add(player1);

顺便说一句,使用XAML设置样式和布局会更好。