Laden...

Bei Tastaturdruck wird Image unsichtbar

Letzter Beitrag vor 28 Tagen 6 Posts 265 Views
Bei Tastaturdruck wird Image unsichtbar

Ich habe ein weiteres Problem:

Ich habe mir ein Menü gebaut. (Bild im Anhang)

Ich habe ein Grid-Background gesetzt. Dieser ist der Holztisch, den man auf dem Bild erkennen kann.
Darauf liegen dann andere Images.
Soweit ich weiß ist Grid hierarchisch aufgebaut, deswegen habe ich auch die Reihenfolge beachtet.
Doch sobald ich irgendeine Taste auf der Tastatur drücke, ist das Bild der Schriftrolle weg. Und man sieht den Tisch, also den Grid Background.
Wie kann ich das verhindern?
Die Labels und Textboxen sind noch zu sehen, nur das Schriftrollenbild ist weg.
Weiß da jemand einen Rat?

Mein derzeitiger Workaround ist, dass komplette Hintergrundbild auszutauschen, wenn man "Spiel starten" klickt.
Also zu Spielstart ist die Schriftrolle fix, also ein Bild mit Holztisch.
Nach dem Starten wird dann nur noch ein Bild mit dem Tisch angezeigt.
Das funktioniert soweit gut.

Also von alleine passiert das sicherlich nicht, das muß schon an deinem Code liegen. In deinem anderen Thema hast du ja Code bzgl. Visibility gezeigt. Hast du evtl. ein falsches Element unsichtbar gesetzt?

Oder sind die Textboxen auf dem falschen Grid-Element plaziert, so daß die Z-Reihenfolge nicht paßt (also durch den Tastendruck wird dann evtl. die fokussierte TextBox, mitsamt des Parent-Elements, in den Vordergrund geholt und dein Image verschwindet dahinter).

Ansonsten zeige mal den relevanten XAML-Code sowie evtl. C#-Code.

PS: Schönes Hintergrundbild!

Ich werde es jetzt erstmal vorerst so lassen, da ich alle nötigen Elemente erstmal auf "Hidden" gesetzt habe und durch den Klick auf "Spiel starten" sichtbar mache.
Ich habe die Hierarchie bisher nur in der Reihenfolge sichergestellt.
Aber eventuell müsste ich das noch durch Einrücken im Code festlegen?
Hier mal meine derzeitige XAML (bitte nicht Diffamieren, ich mache das erst seit 4 Tagen ):

....
        <Image x:Name="menue_img" Grid.Row="0" Grid.Column="2"  Grid.RowSpan="14" Grid.ColumnSpan="6" HorizontalAlignment="Center" VerticalAlignment="Top" Stretch="UniformToFill" Source="img/menue.png" Visibility="Hidden"/>
        <Label x:Name="menue_start_label" Content= "Spiel starten" Grid.Row="4" Grid.Column="3" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" MouseEnter="menue_start_label_MouseEnter" MouseLeave="menue_start_label_MouseLeave" MouseLeftButtonDown="menue_start_label_MouseLeftButtonDown" />
        <Label x:Name="menue_regeln_label" Content= "Regeln" Grid.Row="5" Grid.Column="3" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" MouseEnter="menue_regeln_label_MouseEnter" MouseLeave="menue_regeln_label_MouseLeave" MouseLeftButtonDown="menue_regeln_label_MouseLeftButtonDown" />
        <Label x:Name="quit_label" Content= "Beenden" Grid.Row="11" Grid.Column="3" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" MouseLeftButtonDown="quit_label_MouseLeftButtonDown" MouseEnter="quit_label_MouseEnter" MouseLeave="quit_label_MouseLeave" />
        <Label x:Name="menue_punkte_label" Content= "Punkte" Grid.Row="6" Grid.Column="3" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" />
        <Label x:Name="spielereins_label" Content= "Spieler 1" Grid.Row="7" Grid.Column="3" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" />
        <Label x:Name="spielerzwei_label" Content= "Spieler 2" Grid.Row="8" Grid.Column="3" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Bottom" FontSize="30" FontFamily="Segoe Script" Visibility="Visible" Background="{x:Null}" BorderThickness="0" />
        <TextBox x:Name="menue_punkte_txtbox" Text="" Grid.Column="4" Grid.ColumnSpan="2" HorizontalAlignment="Left"  Grid.Row="6" TextWrapping="Wrap"  VerticalAlignment="Center" FontSize="40" Background="{x:Null}" MinWidth="200"/>
        <TextBox x:Name="menue_spielereins_txtbox" Text="" Grid.Column="4" Grid.ColumnSpan="2" HorizontalAlignment="Left"  Grid.Row="7" TextWrapping="Wrap"  VerticalAlignment="Center" FontSize="40" Background="{x:Null}" MinWidth="200"/>
        <TextBox x:Name="menue_spielerzwei_txtbox" Text="" Grid.Column="4" Grid.ColumnSpan="2" HorizontalAlignment="Left"  Grid.Row="8" TextWrapping="Wrap"  VerticalAlignment="Center" FontSize="40" Background="{x:Null}" MinWidth="200" Margin="0,0,20,0"/>
        <Image x:Name="regeltext_img"  Grid.Row="3" Grid.Column="3" Grid.RowSpan="9" Grid.ColumnSpan="3" HorizontalAlignment="Center" Source="img/regelntext.png" Visibility="Hidden" Stretch="Fill" Margin="0,0,20,20" />
        <Image x:Name="pfeil_img"  Grid.Row="10" Grid.Column="2" HorizontalAlignment="Center" Source="img/pfeil.png" Visibility="Hidden" MouseEnter="pfeil_img_MouseEnter" MouseLeave="pfeil_img_MouseLeave" MouseLeftButtonDown="pfeil_img_MouseLeftButtonDown"/>
        <MediaElement x:Name="wuerfel_media" LoadedBehavior="Manual"  Source="sound/wuerfelsound.wav" />
        <MediaElement x:Name="applaus_media" LoadedBehavior="Manual" Source="sound/applaus.wav" />
        <MediaElement x:Name="background_media" Source="sound/TavernTheme4.wav"/>
    </Grid>
</Window>

Soll ja auch erstmal nur ein kleines Projekt zum Üben sein.
Sind auch noch nicht alle Regeln enthalten.
Wer möchte kann sich das Spiel ja mal herunterladen und ansehen.
https://drive.google.com/file/d/1ts1xWAJwZNnEUqCbXHJPabJt97Dy1QBk/view?usp=sharing

Das wird dann wohl am Grid.RowSpan und Grid.ColumSpan liegen, welches die anderen Element überlagert (bzw. "unterlagert"), so daß es von dem von mir beschriebenen Effekt bzgl. der Z-Reihenfolge kommt.

Du könntest aber direkt das Bild als Background von einem weiteren, verschachtelten Grid setzen: Set background image on grid in WPF using C#
Dies hätte auch den Vorteil, daß du direkt die Visibility des Grids ändern könntest, anstatt alle Elemente einzeln.

PS: Bei deiner veröffentlichten Version wird das Menübild nochmal angezeigt, wenn man die Taste Esc drückt.

Genau....das Menü ist noch nicht fertig. Ist noch Early-Access 😄

Hier geht es zur Projektvorstellung:
https://mycsharp.de/forum/threads/125755/wuerfelspiel-farkle