Files
2026-04-17 14:55:32 -04:00

3.9 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DTS Viewer/DTS.Viewer/RegionAdapters/StackPanelRegionAdapter.cs
2026-04-16T14:01:11.367542+00:00 zai-org/GLM-5-FP8 1 d99a52248dae627a

StackPanelRegionAdapter Documentation

1. Purpose

StackPanelRegionAdapter is a Prism region adapter that enables StackPanel controls to participate in Prism's region management system. It bridges the gap between Prism's IRegion abstraction and WPF's StackPanel, allowing views to be dynamically added to and removed from a StackPanel through Prism's navigation and view injection mechanisms. This adapter is part of the DTS.Viewer namespace and follows the Prism framework's adapter pattern for region management.

2. Public Interface

Class: StackPanelRegionAdapter

Inherits from: RegionAdapterBase<StackPanel>

Constructor

public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)

Initializes a new instance of the adapter with the specified region behavior factory. Delegates to the base class constructor.

Method: Adapt

protected override void Adapt(IRegion region, StackPanel regionTarget)

Subscribes to the CollectionChanged event on region.Views and synchronizes views with the StackPanel's Children collection:

  • Add action: Iterates through e.NewItems and adds each UIElement to regionTarget.Children
  • Remove action: Iterates through e.OldItems and removes each UIElement from regionTarget.Children if present
  • Null region: Returns immediately without any action

Method: CreateRegion

protected override IRegion CreateRegion()

Creates and returns a new instance of AllActiveRegion. This region type considers all contained views as active at all times.

3. Invariants

  • The adapter always creates an AllActiveRegion; it does not support activation/deactivation semantics
  • The Adapt method will not throw if region is null; it returns silently
  • Only UIElement instances can be added to the StackPanel through this adapter (enforced by WPF's Children collection)
  • The adapter does not handle NotifyCollectionChangedAction.Replace, Move, or Reset actions—only Add and Remove

4. Dependencies

Imports (this module depends on):

  • System.Collections.SpecializedNotifyCollectionChangedAction, NotifyCollectionChangedEventArgs
  • System.WindowsUIElement
  • System.Windows.ControlsStackPanel
  • Microsoft.Practices.Prism.RegionsIRegion, IRegionBehaviorFactory, RegionAdapterBase<T>, AllActiveRegion

Dependents (inferred):

  • This adapter must be registered with Prism's region adapter mappings during application bootstrap for Prism to use it for StackPanel regions. The registration code is not present in this file.

5. Gotchas

  1. Incomplete collection change handling: The switch statement in Adapt only handles Add and Remove actions. Replace, Move, and Reset actions fall through without any handling, which could lead to inconsistent state if the region's view collection undergoes those operations.

  2. Redundant variable assignment in remove loop: The code assigns elementLoopVariable from the loop, then immediately reassigns it to a local element variable. This is unnecessary and adds no value.

  3. No null checks on NewItems/OldItems: The code assumes e.NewItems and e.OldItems are non-null. While Prism typically provides these, a malformed CollectionChanged event could cause a NullReferenceException.

  4. Silent failure on null region: The null check at the start of Adapt returns without any logging or exception, which could make debugging difficult if a null region is passed unexpectedly.

  5. AllActiveRegion semantics: Developers expecting fine-grained control over view activation (e.g., single-active regions like tab controls) should be aware that all views in this region are always considered active.