---
description: Formats WPF XAML and C# code using XamlStyler and dotnet format. Generates Settings.XamlStyler and .editorconfig files automatically. Use when code formatting or style cleanup is needed.
user-invocable: false
---

# WPF and C# Code Formatting

Applies consistent code style to XAML and C# files.

---

## 1. Required Tools

### .NET 10 SDK

All commands use `dotnet dnx` for cross-platform compatibility (Windows, Linux, macOS).

```bash
# Verify .NET 10 is available
dotnet --version  # Should be 10.0.x or higher
```

### XamlStyler (XAML Formatting)

Run via `dotnet dnx` (dotnet tool runner). No manual installation required.

### dotnet format (C# Formatting)

Included with .NET SDK by default.

---

## 2. Configuration Files

### Settings.XamlStyler

Copy from template to workspace root if `Settings.XamlStyler` doesn't exist.

**Template location**: `templates/Settings.XamlStyler`

**Key settings**:
- `AttributesTolerance: 1` - Allow up to 1 attribute on same line
- `KeepFirstAttributeOnSameLine: true` - Keep first attribute on element line

### .editorconfig

Copy from template to workspace root if `.editorconfig` doesn't exist.

**Template location**: `templates/.editorconfig`

**Key settings**:
- Indentation: 4 spaces
- Line ending: CRLF (Windows)
- Max line length: 120

---

## 3. Formatting Commands

### XAML Formatting

```bash
# Format all XAML files in workspace
dotnet dnx -y XamlStyler.Console -- -d "{workspace}" -r -c "{workspace}/Settings.XamlStyler"

# Format single file
dotnet dnx -y XamlStyler.Console -- -f "{file.xaml}" -c "{workspace}/Settings.XamlStyler"
```

**dotnet dnx Options**:
- `-y`: Auto-accept confirmation prompt
- `--`: Separator between dnx options and tool arguments

**XamlStyler Options**:
- `-d`: Target directory
- `-f`: Target file
- `-r`: Recursive processing
- `-c`: Configuration file path

### C# Formatting

```bash
# Format entire solution
dotnet format "{solution.sln}" --no-restore

# Format specific project only
dotnet format "{project.csproj}" --no-restore

# Format single file
dotnet format "{project.csproj}" --include "{file.cs}" --no-restore
```

**Options**:
- `--no-restore`: Skip NuGet restore (faster)
- `--include`: Target specific file

---

## 4. Workflow

### Full Formatting

```
Task Progress:
- [ ] Step 1: Check if Settings.XamlStyler exists, create if not
- [ ] Step 2: Check if .editorconfig exists, create if not
- [ ] Step 3: Run dotnet dnx XamlStyler.Console for XAML formatting
- [ ] Step 4: Run dotnet format for C# formatting
```

### Per-file Formatting (Hook Usage)

```
- When .xaml file modified: Run dotnet dnx XamlStyler.Console
- When .cs file modified: Run dotnet format
```

---

## 5. Notes

- **Check git status**: Verify uncommitted changes before formatting
- **Binary exclusion**: bin/, obj/ folders automatically excluded
- **Encoding**: UTF-8 with BOM maintained (Visual Studio compatible)

---

## 6. References

- [XamlStyler GitHub](https://github.com/Xavalon/XamlStyler)
- [dotnet format Documentation](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-format)
- [.editorconfig Specification](https://editorconfig.org/)
