Como acessar um controle WPF localizado em um ControlTemplate?
-
03-07-2019 - |
Pergunta
Normalmente, os controles WPF são declarados nos arquivos .xaml e não no código por trás (arquivos .xaml.cs). No entanto, às vezes eu preciso usar alguns desses controles por trás do código, a fim de manipulá-los. Como posso obter o identificador de tal controle se ele "reside" no arquivo XAML?
Solução
Você pode usar o método FindName () da classe ControlTemplate.
// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
Outras dicas
Não tenho certeza sobre o que está pedindo, por isso vou tentar responder a ambas as instâncias que eu estou interpretando como a sua pergunta.
1) Se você quiser declarar um controle explícito, e editar, em seguida, diretamente, tudo que você tem a fazer é definir a propriedade nome como tal:
<Canvas x:Name="myCanvas"/>
Você pode acessar a tela através do nome como tal:
myCanvas.Background = Brushes.Blue;
2) Se você estiver olhando para declarar um controlo genérico e, em seguida, usá-lo várias vezes, você pode fazê-lo como este:
<Window>
<Window.Resources>
<Ellipse x:Key="myEllipse" Height="10" Width="10">
</Window.Resources>
</Window>
Você pode acessar esse controle predefinido usando esta sintaxe em código:
Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse");
Se você quiser usar o Resourse como um modelo para vários controles, adicione x: Shared = "false"
.