65 lines
3.9 KiB
Markdown
65 lines
3.9 KiB
Markdown
|
|
---
|
||
|
|
source_files:
|
||
|
|
- DataPRO/CustomWindow/WindowMaximizeButton.cs
|
||
|
|
- DataPRO/CustomWindow/WindowRestoreButton.cs
|
||
|
|
- DataPRO/CustomWindow/WindowCloseButton.cs
|
||
|
|
- DataPRO/CustomWindow/WindowMinimizeButton.cs
|
||
|
|
- DataPRO/CustomWindow/Others.cs
|
||
|
|
- DataPRO/CustomWindow/WindowButton.xaml.cs
|
||
|
|
generated_at: "2026-04-17T16:28:39.453177+00:00"
|
||
|
|
model: "zai-org/GLM-5-FP8"
|
||
|
|
schema_version: 1
|
||
|
|
sha256: "855cc573ec161a3c"
|
||
|
|
---
|
||
|
|
|
||
|
|
# CustomWindow
|
||
|
|
|
||
|
|
### Purpose
|
||
|
|
This module provides custom window chrome controls for WPF applications, specifically styled window title bar buttons (minimize, maximize, restore, close). It implements a custom `WindowButton` base class with dependency properties for managing button content states and corner radius styling, enabling consistent custom window styling across the application.
|
||
|
|
|
||
|
|
### Public Interface
|
||
|
|
|
||
|
|
**WindowButton** : `Button`
|
||
|
|
- `WindowButton()` - Constructor that calls `InitializeComponent()` and attaches an `IsEnabledChanged` handler to call `RefreshContent()`.
|
||
|
|
- `Content` (DependencyProperty) - The button content when enabled. Hides base `Button.Content`.
|
||
|
|
- `ContentDisabled` (DependencyProperty) - The button content when disabled.
|
||
|
|
- `CornerRadius` (DependencyProperty) - Corner radius for button styling.
|
||
|
|
- `ActiveContent` (DependencyProperty) - The currently active content based on enabled state.
|
||
|
|
- `RefreshContent()` - Sets `ActiveContent` to `Content` if enabled, otherwise `ContentDisabled`.
|
||
|
|
- `BackgroundDefaultValue` (virtual property) - Returns `DefaultBackgroundBrush` from resources.
|
||
|
|
|
||
|
|
**WindowMaximizeButton** : `WindowButton`
|
||
|
|
- `WindowMaximizeButton()` - Loads `WindowButtonMaximizeIcon` and `WindowButtonMaximizeIconDisabled` from `ButtonIcons.xaml`.
|
||
|
|
|
||
|
|
**WindowRestoreButton** : `WindowButton`
|
||
|
|
- `WindowRestoreButton()` - Loads `WindowButtonRestoreIcon` and `WindowButtonRestoreIconDisabled` from `ButtonIcons.xaml`.
|
||
|
|
|
||
|
|
**WindowCloseButton** : `WindowButton`
|
||
|
|
- `WindowCloseButton()` - Loads `WindowButtonCloseIcon` and `WindowButtonCloseIconDisabled` from `ButtonIcons.xaml`.
|
||
|
|
|
||
|
|
**WindowMinimizeButton** : `WindowButton`
|
||
|
|
- `WindowMinimizeButton()` - Loads `WindowButtonMinimizeIcon` and `WindowButtonMinimizeIconDisabled` from `ButtonIcons.xaml`.
|
||
|
|
|
||
|
|
**WindowButtonState** (enum)
|
||
|
|
- Values: `Normal`, `Disabled`, `None`
|
||
|
|
|
||
|
|
**TypeConverterStringToUIElement** : `TypeConverter`
|
||
|
|
- `CanConvertFrom(ITypeDescriptorContext, Type)` - Returns `true` if source type is `string`.
|
||
|
|
- `ConvertFrom(ITypeDescriptorContext, CultureInfo, object)` - Converts string to a `TextBlock` with vertical centering and left margin of 3.
|
||
|
|
|
||
|
|
### Invariants
|
||
|
|
- `ButtonIcons.xaml` must exist in the assembly at the pack URI `pack://application:,,,/CustomWindow;component/ButtonIcons.xaml`.
|
||
|
|
- The resource dictionary must contain the icon keys: `WindowButtonMaximizeIcon`, `WindowButtonMaximizeIconDisabled`, `WindowButtonRestoreIcon`, `WindowButtonRestoreIconDisabled`, `WindowButtonCloseIcon`, `WindowButtonCloseIconDisabled`, `WindowButtonMinimizeIcon`, `WindowButtonMinimizeIconDisabled`.
|
||
|
|
- `DefaultBackgroundBrush` must be defined in resources for `BackgroundDefaultValue` to function.
|
||
|
|
|
||
|
|
### Dependencies
|
||
|
|
- **Depends on**: `System.Windows`, `System.Windows.Controls`, `System.Windows.Markup`, `System.Windows.Media`, `System.ComponentModel`.
|
||
|
|
- **Depended on by**: Not determinable from source alone; likely used by custom window templates or shell views.
|
||
|
|
|
||
|
|
### Gotchas
|
||
|
|
- **Runtime resource loading**: Each button constructor loads `ButtonIcons.xaml` via `XamlReader.Load()` at instantiation time. This has performance implications if many buttons are created.
|
||
|
|
- **No error handling**: The resource loading will throw if `ButtonIcons.xaml` is missing or if expected resource keys are absent.
|
||
|
|
- **Shadowed Content property**: The `new` keyword hides the base `Button.Content` property. Setting `Content` on a `WindowButton` will not behave like a standard button.
|
||
|
|
- **Commented-out code**: `WindowCloseButton` and `WindowMinimizeButton` contain commented-out `CornerRadius` assignments, suggesting incomplete refactoring.
|
||
|
|
|
||
|
|
---
|