 | AttachedPropertiesContainer Klasse |
Statischer Container für Attached Properties.
VererbungshierarchieSystemObject Vishnu.WPF_UI.DependencyPropertiesAttachedPropertiesContainer Namensraum: Vishnu.WPF_UI.DependencyPropertiesAssembly: Vishnu.WPF_UI (in Vishnu.WPF_UI.dll) Version: 1.0.0+d75bac576d44afb64cfff79fd3665c8ca1172cbc
Syntaxpublic static class AttachedPropertiesContainer
Public NotInheritable Class AttachedPropertiesContainer
public ref class AttachedPropertiesContainer abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type AttachedPropertiesContainer = class end
Der AttachedPropertiesContainer Typ exponiert die folgenden Member.
Methoden
Felder | Name | Beschreibung |
---|
  | HasParentProperty |
Bei True hat der Knoten einen Eltern-Knoten,
bei False ist er die Root.
|
  | LastNotNullLogicalProperty |
Attached Property für einen nullable Boolean zur Weitergabe des logischen Zustands
des dem Control zugeordneten Checkers (wird z.B. zur abhängigen Farbgebung
(false=rot, true=grün) einer übergeordneten Border in einem ControlTemplate genutzt):
Nach diversen Fehlversuchen hat sich als einzige gangbare Lösung folgende Vorgehensweise
herauskristallisiert: einem dem ControlTemplate übergeordneten Control oder
DataTemplate wird die AttachedProperty "LastNotNullLogical" zugeordnet:
<Expander Name="Exp" Template="{StaticResource ExpanderStyleHeaderCentered}"
...
attached:AttachedPropertiesContainer.LastNotNullLogical="{Binding LastNotNullLogical, diag:PresentationTraceSources.TraceLevel=High}"
>
Die AttachedProperty "LastNotNullLogical" wird dabei direkt an "LastNotNullLogical" aus
dem DataContext, hier "LogicalNodeViewModel" gebunden.
Im untergeordneten ControlTemplate, hier <ControlTemplate TargetType="ToggleButton">
in LogicalTaskTreeControlStaticResourceDictionary.xaml werden DataTrigger an das übergeordnete
Control mit Path auf die AttachedProperty "LastNotNullLogical" gebunden:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},
Path=(attached:AttachedPropertiesContainer.LastNotNullLogical)}" Value="True">
<Setter Property = "Border.BorderBrush" TargetName="ToggleButtonBorder" Value="{StaticResource ItemBorderBrushGreen}" />
</DataTrigger>
<DataTrigger Binding = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},
Path=(attached:AttachedPropertiesContainer.LastNotNullLogical)}" Value="False">
<Setter Property = "Border.BorderBrush" TargetName = "ToggleButtonBorder" Value = "{StaticResource ItemBorderBrushRed}" />
</ DataTrigger>
Wichtiger Hinweis: andere Lösungsansätze scheiterten spätestens bei Umschaltung der Tree-Orientierung.
|
  | ParentChildOrientationProperty |
Ausrichtung der Kind-Knoten, horizontal oder vertikal.
|
Zurück nach oben
Angefügte Eigenschaften | Name | Beschreibung |
---|
 | HasParent |
Attached Property (bool). Bei true hat der Knoten Child-Knoten.
|
 | LastNotNullLogical |
Attached Property für einen nullable Boolean zur Weitergabe des logischen Zustands
des dem Control zugeordneten Checkers (wird z.B. zur abhängigen Farbgebung
(false=rot, true=grün) einer übergeordneten Border in einem ControlTemplate genutzt):
Nach diversen Fehlversuchen hat sich als einzige gangbare Lösung folgende Vorgehensweise
herauskristallisiert: einem dem ControlTemplate übergeordneten Control oder
DataTemplate wird die AttachedProperty "LastNotNullLogical" zugeordnet:
<Expander Name="Exp" Template="{StaticResource ExpanderStyleHeaderCentered}"
...
attached:AttachedPropertiesContainer.LastNotNullLogical="{Binding LastNotNullLogical, diag:PresentationTraceSources.TraceLevel=High}"
>
Die AttachedProperty "LastNotNullLogical" wird dabei direkt an "LastNotNullLogical" aus
dem DataContext, hier "LogicalNodeViewModel" gebunden.
Im untergeordneten ControlTemplate, hier <ControlTemplate TargetType="ToggleButton">
in LogicalTaskTreeControlStaticResourceDictionary.xaml werden DataTrigger an das übergeordnete
Control mit Path auf die AttachedProperty "LastNotNullLogical" gebunden:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},
Path=(attached:AttachedPropertiesContainer.LastNotNullLogical)}" Value="True">
<Setter Property = "Border.BorderBrush" TargetName="ToggleButtonBorder" Value="{StaticResource ItemBorderBrushGreen}" />
</DataTrigger>
<DataTrigger Binding = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},
Path=(attached:AttachedPropertiesContainer.LastNotNullLogical)}" Value="False">
<Setter Property = "Border.BorderBrush" TargetName = "ToggleButtonBorder" Value = "{StaticResource ItemBorderBrushRed}" />
</ DataTrigger>
Wichtiger Hinweis: andere Lösungsansätze scheiterten spätestens bei Umschaltung der Tree-Orientierung.
|
 | ParentChildOrientation |
Attached Property (Orientation), Horizontal oder Vertical.
|
Zurück nach oben
Anmerkungen
File: AttachedPropertiesContainer.cs
Autor: Erik Nagel
22.07.2013 Erik Nagel: erstellt
28.11.2022 Erik Nagel: LastNotNullLogicalProperty.
Siehe auch