2017-12-29 45 views
1

Ich habe auf dieses ein Problem für ein bisschen festgefahren und alles, was ich im Web gefunden habe, scheint eine kleine Variation des gleichen Codes, der eine URI mit der ms-appx Schema oder baseURI. Nichts scheint jedoch zu funktionieren.ms-appx funktioniert nicht für Bild in uwp Assets Ordner

Grundsätzlich habe ich eine UWP App mit mehreren Seiten. Wenn ich zu einer der Seiten navigiere, möchte ich ein Bild aus dem Ordner "Assets" der App einer Leinwand auf dieser Seite hinzufügen. Wenn ich dies in XAML mache, wird die Figur ohne Schwierigkeit hinzugefügt.

<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> 

Wenn ich versuche, die Figur in C# -Code nichts hinzuzufügen arbeitet (ein Beispiel habe ich versucht)

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); 

    } 

Während ich in der Lage sein könnte, um es jetzt funktioniert das XAML, ich würde wirklich gerne verstehen, warum der C# -Code nicht funktioniert. Ich lerne immer noch ...

jede Hilfe wäre sehr willkommen ...

+0

Willkommen bei Stack Overflow! Wenn Sie sagen "nichts funktioniert", meinst du, das Bild ist nicht da, oder erhalten Sie einen Fehler? – codeMonkey

+1

das Bild ist nicht da. Kein Fehler Außerdem wurde jetzt festgestellt, dass das Bild im Designer angezeigt wird, wenn ich es mit Xaml hinzufüge, aber nicht sichtbar ist, wenn ich die App starte. – ljanssen

+0

So habe ich den XAML-Code funktioniert, nachdem ich die Lösung neu erstellt habe. Die C# -Code-Option funktioniert jedoch immer noch nicht. – ljanssen

Antwort

1

ich wirklich verstehen möchte, warum der C# -Code ist nicht

Das Thema funktioniert verursacht durch die falschen Werte von Canvas.Left und Canvas.Top Einstellung durch Code-Snippet. Da Sie die Werte Height und Width nicht für GameCanvas festgelegt haben, erhalten Sie den Wert GameCanvas.Width nicht. Wenn Sie das Code-Snippet debuggen, finden Sie den Wert NaN, so dass mit Canvas.Left und Canvas.Top Werte zu NaN, können Sie die Image nicht sehen.

Sie könnten einfach die zwei Codezeilen löschen, die das Code-Snippet funktionieren wird. Oder wenn Sie die tatsächliche Width von GameCanvas erhalten möchten, sollten Sie ActualWidth Eigentum erhalten. Zum Beispiel:

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

By the way, XAML mit Stil und Layout gesetzt wird besser sein.

+0

Danke! Die (tatsächliche) Breite war in der Tat das Problem. Ich bevorzugte zunächst Code, weil ich dachte, ich könnte die Anzahl der hinzuzufügenden Objekte leicht ändern und bestimmte Eigenschaften ändern, um Änderungen der Bildschirmgröße und einiger anderer Funktionen anzupassen. Ich schätze, Sie würden empfehlen, in der Xaml zu binden, um Eigenschaften stattdessen zu ändern? Was wäre der genaue Vorteil davon? – ljanssen

+0

@ljanssen, könnten Sie über MVVM suchen, warum dieser Design-Modus Vorteile nutzen. –