none
Auf dem Control im zweiten ControlTemplate zugreifen RRS feed

  • Frage

  • Hallo,

    ich würde gerne auf einem Control zugreifen der sich im zweiten ControlTemplate befindet.

    Theoretisch kann ich auf den Control in einem ControlTemplate einfach über

    Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);

    zugreifen.

    Wie mache ich aber wenn der Button auch ein ContentControl hat und darin ich auf das TextBlock zugreifen möchte?

    Beispiel:

    <Grid>
            <Button x:Name="MyButton">
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type Button}">
                                    <Border BorderBrush="Black"
                                            BorderThickness="2"
                                            CornerRadius="12"
                                            >
                                        <TextBox x:Name="MyTextBox">
                                            <TextBox.Style>
                                                <Style TargetType="{x:Type TextBox}">
                                                    <Setter Property="Template">
                                                        <Setter.Value>
                                                            <ControlTemplate TargetType="{x:Type TextBox}">
                                                                <Label x:Name="MyLabel" 
                                                                       Content="TEXT"
                                                                       />
                                                            </ControlTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </Style>
                                            </TextBox.Style>
                                        </TextBox>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Button.Style>
            </Button>
        </Grid>

    Danke


    • Bearbeitet jclstefan Freitag, 27. Januar 2017 07:27
    Freitag, 27. Januar 2017 07:05

Alle Antworten

  • Hi Stefan,
    eine einfache Möglichkeit ist die Bindung von Eigenschaften der TextBox an Eigenschaften eines ViewModels. Falls Du Ereignisse der TextBox benötigst, dann nutze ein angehängtes Verhalten (attached behavior).

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    • Bearbeitet Peter Fleischer Samstag, 28. Januar 2017 05:32 Grammatikfehler
    Freitag, 27. Januar 2017 08:31
  • Hallo Stefan,

    nach Möglichkeit solltest du gar nicht von außerhalb auf die Elemente in einem Template zugreifen. Templates sollten lediglich die zur Verfügung stehenden Daten anzeigen. Eine Änderung des Templates würde sonst zu Problemen führen. Auch wird der Code dadurch um einiges unübersichtlicher.

    Die Frage ist also was du im Detail vor hast. Am Ende wird es vermutlich auf die von Peter angesprochenen Datenbindungen hinaus laufen.

    Ich habe es nun nicht ausprobiert, aber theoretisch solltest du die Aufrufe auch einfach weiter verschachteln können:

    var grid = (Grid)myButton1.Template.FindName("grid", myButton1);
    var buttonInGrid = grid.Children[0];
    var borderInButtonInGrid = (Border)buttonInGrid.Template.FindName("myInnerBorder", buttonInGrid);
    Das wird aber auch nicht gerade übersichtlicher...

    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    Freitag, 27. Januar 2017 13:42