Dreamine.UI.Wpf.Equipment
1.0.1
dotnet add package Dreamine.UI.Wpf.Equipment --version 1.0.1
NuGet\Install-Package Dreamine.UI.Wpf.Equipment -Version 1.0.1
<PackageReference Include="Dreamine.UI.Wpf.Equipment" Version="1.0.1" />
<PackageVersion Include="Dreamine.UI.Wpf.Equipment" Version="1.0.1" />
<PackageReference Include="Dreamine.UI.Wpf.Equipment" />
paket add Dreamine.UI.Wpf.Equipment --version 1.0.1
#r "nuget: Dreamine.UI.Wpf.Equipment, 1.0.1"
#:package Dreamine.UI.Wpf.Equipment@1.0.1
#addin nuget:?package=Dreamine.UI.Wpf.Equipment&version=1.0.1
#tool nuget:?package=Dreamine.UI.Wpf.Equipment&version=1.0.1
Dreamine.UI.Wpf.Equipment
Dreamine.UI.Wpf.Equipment provides WPF components designed for industrial and equipment-grade applications.
It implements the abstractions defined in Dreamine.UI.Abstractions and delivers:
- A fully featured on-screen virtual keyboard
- A configurable blink popup window system
- A popup service registered with the Dreamine DI container
What this library solves
Industrial WPF applications running on touch panels or locked-down terminals require:
- An on-screen keyboard that integrates with WPF text input without hooking IME
- Popup windows that blink to attract operator attention
- A popup service abstraction so business code does not reference window types directly
- Multi-monitor aware keyboard positioning
- Enter-key action providers for validation before the keyboard dismisses
Key Features
- DreamineVirtualKeyboard — full alphanumeric + numeric + decimal keyboard with language switching
- DreamineVirtualKeyboardWindow — floating window that positions itself relative to the focused input element using Win32 monitor API
- DreamineVirtualKeyboardAssist — attached property helper for zero-code XAML keyboard activation
- DreamineBlinkPopupWindow — color-alternating animated popup with
Alt+F4/SC_CLOSEblocking - DreaminePopupService — implements
IPopupService; async modal and non-modal display - KeyboardLayoutSelectorConverter —
IValueConverterthat selects the correct keyboardDataTemplateby layout
Requirements
- Target Framework:
net8.0-windows - Dependencies:
Dreamine.UI.AbstractionsDreamine.UI.WpfDreamine.UI.Wpf.ControlsDreamine.MVVM.ViewModelsSharpHook5.3.8+
Installation
NuGet
dotnet add package Dreamine.UI.Wpf.Equipment
PackageReference
<PackageReference Include="Dreamine.UI.Wpf.Equipment" />
Project Structure
Dreamine.UI.Wpf.Equipment
├── Popup/
│ ├── DreamineBlinkPopupWindow.xaml(.cs)
│ ├── DreamineBlinkPopupWindowViewModel.cs
│ └── DreaminePopupService.cs
└── VirtualKeyboard/
├── DreamineEnterActionGroupProvider.cs
├── DreamineFullKeyboardLayout.xaml(.cs)
├── DreamineNumericKeyboardLayout.xaml(.cs)
├── DreamineVirtualKeyboard.cs
├── DreamineVirtualKeyboardAssist.cs
├── DreamineVirtualKeyboardUI.xaml(.cs)
├── DreamineVirtualKeyboardWindow.xaml(.cs)
├── DreamineVkbIconAdorner.cs
├── Key.cs
├── KeyboardLayoutSelectorConverter.cs
└── ShiftWindowOntoScreenHelper.cs
Architecture Role
Dreamine.UI.Abstractions
│
Dreamine.UI.Wpf.Controls
Dreamine.UI.Wpf
│
Dreamine.UI.Wpf.Equipment ← this package
│
Application Code
Quick Start
Virtual keyboard — XAML attached property
Activate the virtual keyboard for any text input by setting the attached property:
xmlns:vk="clr-namespace:Dreamine.UI.Wpf.Equipment.DreamineVirtualKeyboard;assembly=Dreamine.UI.Wpf.Equipment"
<TextBox vk:DreamineVirtualKeyboardAssist.UseVirtualKeyBoard="True"
vk:DreamineVirtualKeyboardAssist.Layout="Text" />
<TextBox vk:DreamineVirtualKeyboardAssist.UseVirtualKeyBoard="True"
vk:DreamineVirtualKeyboardAssist.Layout="Numeric"
vk:DreamineVirtualKeyboardAssist.Minimum="0"
vk:DreamineVirtualKeyboardAssist.Maximum="9999" />
Blink Popup — basic usage
var svc = DMContainer.Resolve<IPopupService>();
await svc.ShowBlinkAsync(ownerWindow, new BlinkPopupOptions
{
Title = "ALARM",
Message = "Motor overload detected",
UseBlink = true,
BlinkIntervalMs = 500,
Color1 = Colors.OrangeRed,
Color2 = Colors.DarkRed,
OkText = "Acknowledge",
IsModal = true
});
Blink Popup — block Alt+F4
var options = new BlinkPopupOptions
{
Message = "Operator must acknowledge",
BlockAltF4 = true,
OkText = "OK"
};
Enter-key validation provider
public class RangeCheckProvider : IEnterActionProvider
{
public DependencyObject? PlacementTarget { get; set; }
public async Task<ActionResult> ExecuteAsync()
{
double val = double.Parse(myTextBox.Text);
if (val < 0 || val > 100)
return ActionResult.Rejected;
return ActionResult.Accepted;
}
}
<TextBox>
<vk:DreamineVirtualKeyboardAssist.EnterActionProvider>
<local:RangeCheckProvider />
</vk:DreamineVirtualKeyboardAssist.EnterActionProvider>
</TextBox>
Enum Reference
| Enum | Values | Used By |
|---|---|---|
VkLayout |
Text, Password, Numeric, Decimal |
Virtual keyboard |
LanguageCode |
en_US, ko_KR, zh_CN, vi_VN |
Keyboard language |
ActionResult |
Accepted, Rejected |
Enter-key providers |
KeyboardInputMode |
Text, Numeric, Password |
Input routing |
Design Notes
- Multi-monitor positioning uses Win32
MonitorFromPoint/GetMonitorInfovia P/Invoke — no WinForms dependency - The virtual keyboard window is a singleton per application;
DreamineVirtualKeyboardAssistmanages its show/hide lifecycle DreamineBlinkPopupWindowusesWM_SYSCOMMAND / SC_CLOSEinterception viaHwndSourceto block system close whenBlockAltF4 = trueDreaminePopupServicesupports both synchronousShowBlinkand asynchronousShowBlinkAsyncwith optional auto-close timeout andCancellationToken
License
MIT License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
-
net8.0-windows7.0
- Dreamine.MVVM.ViewModels (>= 1.0.5)
- Dreamine.UI.Abstractions (>= 1.0.1)
- Dreamine.UI.Wpf (>= 1.0.1)
- Dreamine.UI.Wpf.Controls (>= 1.0.1)
- SharpHook (>= 5.3.8)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Dreamine.UI.Wpf.Equipment:
| Package | Downloads |
|---|---|
|
Dreamine.UI.FullKit
All-in-one meta package for Dreamine UI libraries (WPF stack). Includes Abstractions, Wpf host, Controls, Equipment, and Themes. Blazor / MAUI / WinForms hosts must be installed separately due to framework differences. |
GitHub repositories
This package is not used by any popular GitHub repositories.