Claude-skill-registry designing-avalonia-customcontrol-architecture
Defines the basic solution structure for AvaloniaUI Desktop Applications using CustomControl. Use when creating new AvaloniaUI projects or designing stand-alone control styles with ControlTheme.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/designing-avalonia-customcontrol-architecture" ~/.claude/skills/majiayu000-claude-skill-registry-designing-avalonia-customcontrol-architecture && rm -rf "$T"
manifest:
skills/data/designing-avalonia-customcontrol-architecture/SKILL.mdsource content
6.5 Writing AXAML Code
- When generating AXAML code, use CustomControl with ControlTheme for Stand-Alone Control Style
- Purpose: Theme separation and minimizing style dependencies
6.5.1 AvaloniaUI Custom Control Library Project Structure
Recommended Project Structure:
YourAvaloniaSolution ├── YourCustomControlProject1/ │ ├── Properties/ │ │ ├── AssemblyInfo.cs ← AssemblyInfo.cs definition │ ├── Themes/ │ │ ├── Generic.axaml ← ControlTheme definition │ │ ├── CustomButton1.axaml ← Individual control theme │ │ └── CustomTextBox1.axaml ← Individual control theme │ ├── CustomButton1.cs │ └── CustomTextBox1.cs └── YourCustomControlProject2/ ├── Properties/ │ ├── AssemblyInfo.cs ← AssemblyInfo.cs definition ├── Themes/ │ ├── Generic.axaml ← ControlTheme definition │ ├── CustomButton2.axaml ← Individual control theme │ └── CustomTextBox2.axaml ← Individual control theme ├── CustomButton2.cs └── CustomTextBox2.cs
6.6 ⚠️ Distinguishing ResourceInclude vs MergeResourceInclude
- ResourceInclude: Used in regular ResourceDictionary files (Generic.axaml, Styles, etc.)
- MergeResourceInclude: Used only in Application.Resources (App.axaml)
Advantages:
- Complete separation of theme and logic based on ControlTheme
- Flexible style variations through CSS Classes
- State management via Pseudo Classes (:pointerover, :pressed, etc.)
- Theme modularization through ResourceInclude
- Work can be split by file for team collaboration
6.5.2 Key Differences Between WPF and AvaloniaUI
| Item | WPF | AvaloniaUI |
|---|---|---|
| File Extension | .xaml | .axaml |
| Style Definition | Style + ControlTemplate | ControlTheme |
| State Management | Trigger, DataTrigger | Pseudo Classes, Style Selector |
| CSS Support | ❌ | ✅ (Classes attribute) |
| Resource Merging | MergedDictionaries + ResourceDictionary | MergedDictionaries + ResourceInclude |
| Dependency Props | DependencyProperty | StyledProperty, DirectProperty |