# Lathund: koda WPF-applikationer

## Appens fönster

```xml
<Window ...
        Title="MinApp"
        MaxWidth="800" MaxHeight="450"
        SizeToContent="WidthAndHeight">
    <!-- Innehållet i fönstret -->
</Window>
```

## Vanliga kontroller och attribut i XAML

### Layoutkontroller – StackPanel

En layoutkontroll som ordnar sina barnkontroller i en vertikal eller horisontell stapel.

```xml
    <StackPanel Background="#EEE" Orientation="Horizontal">
        <!-- Barnkontroller -->
    </StackPanel>
```

### Vanliga kontroller

```xml
<Label Margin="10" FontSize="24" Foreground="#FFF">Ange ditt namn</Label>
<Button Margin="10" Padding="10" Background="Red" FontWeight="Bold" Width="100">Spara</Button>
<TextBox Margin="10" Padding="10" Height="100"></TextBox>
<ListBox Margin="10" Padding="10"></ListBox>
```

Andra användbara attribut för `TextBox`-kontrollen:

* `ReadOnly="True"` – gör textfältet skrivskyddat
* `TextWrapping="Wrap"` – gör att texten bryts om den är för lång för att få plats i fältet
* `AcceptsReturn="True"` – gör att användaren kan trycka på Enter för att skapa en ny rad

## Koppla kontroller till C#-kod

### click-event och event-metoder

När en användare klickar på en knapp utlöses ett `click`-event.

```xml
<Button Click="KlickSpara" Margin="10" Padding="10">Spara</Button>
```

```csharp
void KlickSpara(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Du sparade dina ändringar!");
}
```

### Referens till kontroller: Name-attributet

Med `Name`-attributet kan vi referera till kontroller i C#-koden:

```xml
<TextBox Name="txbResultat" Margin="10" Padding="10"></TextBox>
```

```csharp
// Läs innehållet i textfältet
string innehall = txbResultat.Text;

// Sätt nytt innehåll i textfältet
txbResultat.Text = "Nytt innehåll visas här!";
```

### Visa en list i en ListBox

Innehållet i en lista kan visas i en `ListBox`-kontroll:

```xml
<ListBox Name="lbResultat" Margin="10" Padding="10"></ListBox>
```

```csharp
List<string> namnLista =["Anna", "Bertil", "Cecilia"];

// Sätt listan som källa för ListBox-kontrollen
lbResultat.ItemsSource = namnLista;

// Uppdatera ListBox-kontrollen med ny data
lbResultat.Items.Refresh();
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://csharp.progdocs.se/lathund-wpf.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
