none
Trigger als Ressource definieren RRS feed

  • Frage

  • Hallo zusammen,

     

    ich bin gerade bei einem Projekt und habe dort mehrere Controls (die alle anders aussehen), jedoch immer dieselben Trigger nutzen.

    Kann man einen Trigger irgendwie als Ressource anlegen und sich dann darauf binden (Binding/StaticResource/DynamicResource)?

     

    Beispiel eines "StandardTriggers":

    [...]

    <ControlTemplate.Triggers>

    <Trigger Property="IsFocused" Value="True">

                                <Setter Property="Background" Value="red" TargetName="Bd_Normal"/>

                            </Trigger>

    <Trigger Property="IsFocused" Value="False">

                                <Setter Property="Background" Value="Blue" TargetName="Bd_Normal"/>

                    </Trigger>

    </ControlTemplate.Triggers>

    [...]

     

    Den Vorteil den ich mir erhoffe, ist ein Trigger, den ich nur an einer Stelle ändern muss und alles funktioniert ohne jedes Control einzeln anzupacken und zu verändern.

     

    Eine Alternative die ich bisher hatte, war die Benutzung von Convertern, jedoch hätte ich das lieber in XAML, da die Resource evtl. mal per Theme geändert werden kann.

     

    Danke für jede Hilfe

     

    JP One

     

    Mittwoch, 24. August 2011 13:37

Alle Antworten

  • Ein Style-Trigger wäre eine Möglichkeit. Den Style kannst Du als StaticResource referenzieren.

    Im Beispiel unten wird der Style auf alle vorhandenen TextBox angewendet.

    Anstelle eines Style kannst Du die Eigenschaft Background auch an eine Property in Deinem View-Modell binden. Dann wird Dein XAML etwas schlanker, was sich gut auf die Gesamt-Performance beim Rendering auswirkt.

        <Grid>
            <Grid.Resources>
                <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
                    <Style.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="Background" Value="Red"/>
                        </Trigger>
                        <Trigger Property="IsFocused" Value="False">
                            <Setter Property="Background" Value="Blue"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Grid.Resources>
            <StackPanel>
                <TextBox />
                <TextBox />
            </StackPanel>
        </Grid>
    





    Mario Muja
    Donnerstag, 26. Januar 2012 14:14