-
Notifications
You must be signed in to change notification settings - Fork 0
Development
FabPei edited this page May 18, 2026
·
1 revision
oPenEfficiency is built on the .NET Framework 4.8 using Microsoft's VSTO (Visual Studio Tools for Office).
oPenEfficiency/
├── Features/ # Core feature logic (Alignment, Tables, Visuals, etc.)
├── Models/ # Data structures and configuration models
├── Services/ # Business logic and PowerPoint interaction layer
├── UI/ # WPF dialogs, sidebar panels, and custom controls
└── Utils/ # Helper classes and Win32 hooks
When contributing or developing new features, strictly adhere to the following mandates:
-
NO GLOBBING in
.csproj: NEVER use wildcards like**\*.csor**\*.xamlfor UI, Models, Services, or Utils folders. Every file MUST be explicitly listed with its correctDependentUponmapping. Wildcards break VSTO code-behind linking. The ONLY exception permitted is theFeaturesfolder. -
XAML connectionId Safety: Define all complex
ContextMenuandResourcesas StaticResources at the top of the XAML file. NEVER nest anonymous context menus inside ListBox templates. -
Constructor-First Initialization: Perform all primary UI population and child control instantiation in the Constructor, not the
Loadedevent. TheLoadedevent is suppressed in VSTO'sElementHost. -
Scrolling Constraints: Gallery views (ListBox, WrapPanel) MUST have
HorizontalScrollBarVisibility="Disabled"to force grid wrapping in the PowerPoint TaskPane. -
Office Namespace Precision: Always use fully qualified names for Office COM types (e.g.,
Microsoft.Office.Core.SmartArtNode). -
Strict XAML Setter Syntax: ALWAYS use the explicit
<Setter Property="X" Value="Y" />syntax. NEVER use shorthand attributes like<Setter X="Y" />.
-
Efficient Elements (EE4P) Integration: Use the
AgendaGenerationServiceadapter pattern to serialize data for EE4P schemas and injectEE4P_AGENDAWIZARDtags. -
ThinkCellGuard: The
AgendaServiceactively scans forTHINKCELLPRESENTATIONDONOTDELETEandTHINKCELLSHAPEDONOTDELETEtags. Slides containing these must be skipped to prevent corruption.
-
Theme Cohesion: Never use
TextMutedBrushorTextSecondaryBrushfor standalone icon buttons or close ("X") buttons in floating windows in Light Theme. UseTextPrimaryBrush. -
Tooltip Inheritance: WPF ToolTips natively inherit
Foregroundproperties. Always ensureToolTipstyles explicitly set their ownBackgroundandForegrounddecoupled from the button hover states.