C# ms appx不适用于uwp资产文件夹中的图像

C# ms appx不适用于uwp资产文件夹中的图像,c#,xaml,uwp,C#,Xaml,Uwp,我一直在这个问题上纠缠了一段时间,我在web上发现的似乎都是同一代码的一个小变体,它涉及一个带有ms appx方案或baseURI的URI。然而,似乎什么都不管用 基本上我有一个UWP应用程序,有几个页面。当我导航到其中一个页面时,我想将应用程序的资产文件夹中的图像添加到此页面的画布中。当我在XAML中执行此操作时,添加图形不会有任何困难 <Grid Name="basicGrid" > <Grid.Background> <ImageBru

我一直在这个问题上纠缠了一段时间,我在web上发现的似乎都是同一代码的一个小变体,它涉及一个带有ms appx方案或baseURI的URI。然而,似乎什么都不管用

基本上我有一个UWP应用程序,有几个页面。当我导航到其中一个页面时,我想将应用程序的资产文件夹中的图像添加到此页面的画布中。当我在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>
虽然我现在可以使用XAML使其工作,但我真的很想理解为什么C代码不工作。我还在学习

任何帮助都将不胜感激

我很想理解为什么C代码不起作用

该问题是由代码段设置的
Canvas.Left
Canvas.Top
的值不正确引起的。由于您没有为
GameCanvas
设置
高度
宽度
值,因此无法获得
GameCanvas.Width
值。如果调试代码段,您将发现值为
NaN
,因此使用
Canvas.Left
Canvas.Top
值到
NaN
,您将无法看到
图像

您可以只删除代码段将工作的两行代码。或者,如果您想获得
GameCanvas
的实际
Width
,您应该获得属性。例如:

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

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

欢迎使用堆栈溢出!当你说“什么都不管用”时,你的意思是图像不在那里,还是你有错误?图像不在那里。现在还没有发现错误,当我使用Xaml添加图像时,图像显示在设计器中,但在运行应用程序时不可见。因此,我在重建解决方案后使Xaml代码正常工作。C#代码选项仍然不起作用。Thanx!(实际)宽度确实是个问题。我最初更喜欢代码,因为我认为我可以很容易地更改要添加的对象的数量,并更改某些属性以适应屏幕大小和其他一些功能的变化。我猜你会建议在Xaml中绑定来改变属性?这到底有什么好处?@ljanssen,你可以搜索关于MVVM的信息,为什么这种设计模式会占优势。
Canvas.SetLeft(player1, GameCanvas.ActualWidth / 2);
Canvas.SetTop(player1, GameCanvas.ActualHeight / 2);
GameCanvas.Children.Add(player1);