Style Parent

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von HamburgerJungeJr.

    Style Parent

    Moin,

    Gibt es in WPF die Möglichkeit den Setter eines Style auf den Parent zu beziehen?

    Ich möchte die Höhe eines Tabcontrols verändern, sobald ein TabItem ausgewählt wurde.

    Ich hoffe ihr könnt mir helfen.

    HamburgerJungeJr

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HamburgerJungeJr“ ()

    Mir fällt spontan auch keine Eigenschaft ein, kannst dir ja ein eigenes Controls machen, die davon erbt und entsprechende Funktionalität anbietet.
    Ansonsten Quick and Dirty würde ich in jedes GotFocus Event von dem entsprechendem TabItem einfach
    DirectCast(tabitem_instance_name.Parent, TabControl).Height = 100 rein schreiben.
    Ich schätze mal, du arbeitest mit dem Designer, da sollte es klappen.
    Vorrausgesetzt natürlich, die Parents sind gesetzt und Parents sind auch immer nur TabControls.
    Ich habe mir jetzt ein CustomControl erstellt.

    VB.NET-Quellcode

    1. ​Public Shared ReadOnly ParentHeightProperty As DependencyProperty = DependencyProperty.Register("ParentHeight", GetType(Double), GetType(RibbonFileItem))
    2. Public Property ParentHeight() As Double
    3. Get
    4. Return CType(GetValue(ParentHeightProperty), Double)
    5. End Get
    6. Set(value As Double)
    7. SetValue(ParentHeightProperty, value)
    8. CType(Me.Parent, TabControl).Height = CType(GetValue(ParentHeightProperty), Double)
    9. End Set
    10. End Property

    Wenn ich jetzt die Property im VB setzte, ändert sich die Höhe.
    Mach ich das aber mit dem Trigger im XAML passiert nichts.

    XML-Quellcode

    1. ​<Style.Triggers>
    2. <Trigger Property="IsSelected" Value="True">
    3. <Setter Property="BorderBrush" Value="{StaticResource formBorderColor}" />
    4. <Setter Property="Background" Value="{StaticResource formBorderColor}" />
    5. <Setter Property="Foreground" Value="#FF8000" />
    6. <Setter Property="ParentHeight" Value="500" />
    7. </Trigger>


    Wo ist mein Denkfehler ??
    das muss glaub ein Style für den TabControl.ItemContainer sein, denn die Tabpage hat ja gar keine IsSelected-Property

    Aber mir ist nicht wirklich klar, was dir vorschwebt, denn in einem TabControl ist immer ein Tab angewählt, wenn du also die TabControl-Höhe im Falle Tab-Anwählung auf 500 setzst, dann hat das TabControl immer die Höhe 500.
    Ich habe es jetzt hinbekommen.

    Die DependencyPropert hat eine PropertChanged-Event.

    VB.NET-Quellcode

    1. ​Public Shared ReadOnly parentHeightProperty As DependencyProperty = DependencyProperty.Register("ParentHeight", GetType(Double), GetType(RibbonItem), New PropertyMetadata(CDbl(100), New PropertyChangedCallback(AddressOf valueChanged)))
    2. Public Property ParentHeight() As Double
    3. Get
    4. Return CType(GetValue(parentHeightProperty), Double)
    5. End Get
    6. Set(value As Double)
    7. SetValue(parentHeightProperty, value)
    8. End Set
    9. End Property
    10. Private Shared Sub valueChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
    11. Dim rItem As RibbonItem = CType(d, RibbonItem)
    12. Select Case e.Property.Name
    13. Case Is = "ParentHeight"
    14. rItem.setParentHeight()
    15. End Select
    16. End Sub
    17. Private Sub setParentHeight()
    18. CType(Me.Parent, TabControl).Height = CType(GetValue(parentHeightProperty), Double)
    19. End Sub