Fragensteller
Auf dem Control im zweiten ControlTemplate zugreifen

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 überGrid 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
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
-
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