Freigeben über


Vorgehensweise: Suchen von Elementen, die mit einer ControlTemplate generiert wurden

In diesem Beispiel wird gezeigt, wie Elemente gefunden werden, die von einem ControlTemplate generiert werden.

Beispiel

Im folgenden Beispiel wird ein Stil gezeigt, der eine einfache ControlTemplate für die Button-Klasse erstellt:

<Style TargetType="{x:Type Button}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Grid Margin="5" Name="grid">
          <Ellipse Stroke="DarkBlue" StrokeThickness="2">
            <Ellipse.Fill>
              <RadialGradientBrush Center="0.3,0.2" RadiusX="0.5" RadiusY="0.5">
                <GradientStop Color="Azure" Offset="0.1" />
                <GradientStop Color="CornflowerBlue" Offset="1.1" />
              </RadialGradientBrush>
            </Ellipse.Fill>
          </Ellipse>
          <ContentPresenter Name="content" Margin="10"
                            HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Um ein Element innerhalb der Vorlage zu finden, nachdem die Vorlage angewendet wurde, können Sie die FindName-Methode von Template aufrufen. Im folgenden Beispiel wird ein Meldungsfeld erstellt, das den tatsächlichen Breitenwert von Grid innerhalb der Steuerelementvorlage zeigt:

// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);

// Do something to the ControlTemplate-generated grid
MessageBox.Show("The actual width of the grid in the ControlTemplate: "
    + gridInTemplate.GetValue(Grid.ActualWidthProperty).ToString());
' Finding the grid that is generated by the ControlTemplate of the Button
Dim gridInTemplate As Grid = CType(myButton1.Template.FindName("grid", myButton1), Grid)

' Do something to the ControlTemplate-generated grid
MessageBox.Show("The actual width of the grid in the ControlTemplate: " & gridInTemplate.GetValue(Grid.ActualWidthProperty).ToString())

Weitere Informationen