Beispielprojekt_Memory/TestProject/MainWindow.xaml.cs

83 lines
3.1 KiB
C#

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace TestProject
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
MainController controller;
public MainWindow()
{
InitializeComponent();
//this ist immer das Objekt, indem man sich gerade befindet
controller = new(this);
}
//Diese Methode fügt eine übergebene Liste von Karten in die GUI ein.
public void InsertCardsIntoGui(List<Karte> cardList)
{
//Zuerst wird das Feld geleert
mainWrapPanel.Children.Clear();
//Danach wird jedes übergebene Kartenobjekt in die GUI eingefügt
foreach (var element in cardList)
InsertKarteInGui(element);
}
//Fügt die Karte in die GUI ein
void InsertKarteInGui(Karte k)
{
//Das ist der Rand außen rum, der für das Markieren zuständig ist
Border border = new();
//Dies ist das Bild, das angezeigt wird
Image image = new();
//Sollte das Objekt schon ausgewählt sein, muss man den Rahmen setzen
if (k.IsChecked)
{
border.BorderThickness = new(3);
border.BorderBrush = Brushes.Crimson;
//Hier wird das Bild gesetzt
var converter = new ImageSourceConverter();
image.Source = (ImageSource)(converter.ConvertFromString(k.Bild) ?? new());
}
else
{
//Hier wird die Rückseite gesetzt
var converter = new ImageSourceConverter();
image.Source = (ImageSource)(converter.ConvertFromString(@"C:\Users\s.schueler.doz\Pictures\back.jpg") ?? new());
}
//Hier wird das Event gesetzt, wenn wer auf das Bild klickt
image.MouseLeftButtonUp += Image_MouseLeftButtonUp;
//Hier werden die Höhe und die Seitenabstände definiert
image.Height = 100;
image.Margin = new(5);
//Hier wird die individuelle ID gesetzt
image.Tag = k.IndividualID;
//Der Border wird dann das Bild hinzugefügt
border.Child = image;
//Dem WrapPanel wird dann die Border hinzugefügt und somit in der GUI sichtbar
mainWrapPanel.Children.Add(border);
}
//Behandelt den Klick auf eine Karte
private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//Wir holen und zuerst das Image
Image i = (Image)sender;
//Dann teilen wir dem Controller mit, dass auf dieses Objekt geklickt wurde. Dabei verwenden wir die individuelle ID aus dem Tag.
controller.ClickOnCard((int)i.Tag);
}
}
}