Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta visão geral se concentra em como os recursos do Windows Presentation Foundation (WPF) podem ser acessados ou criados usando código em vez de sintaxe XAML. Para obter mais informações sobre o uso geral de recursos e recursos de uma perspetiva de sintaxe XAML, consulte Visão geral de recursos XAML.
Acessando recursos a partir do código
As chaves que identificam recursos definidos por XAML também são usadas para recuperar recursos específicos se você solicitar o recurso no código. A maneira mais simples de recuperar um recurso do código é chamar o método FindResource ou o método TryFindResource de objetos de nível de estrutura em seu aplicativo. A diferença comportamental entre esses métodos é o que acontece se a chave solicitada não for encontrada.
FindResource lança uma exceção.
TryFindResource não levantará uma exceção, mas retornará null. Cada método usa a chave de recurso como um parâmetro de entrada e retorna um objeto digitado vagamente.
Normalmente, uma chave de recurso é uma cadeia de caracteres, mas há usos ocasionais sem cadeia de caracteres. A lógica de pesquisa para resolução de recursos de código é a mesma que no caso XAML de referência de recurso dinâmico. A pesquisa de recursos começa a partir do elemento chamador e, em seguida, continua através dos elementos pai na árvore lógica. A pesquisa continua em recursos de aplicativos, temas e recursos do sistema, se necessário. Uma solicitação de código para um recurso levará em conta corretamente as alterações feitas nesses recursos durante o tempo de execução.
O exemplo de código a seguir demonstra um manipulador de Click eventos que localiza um recurso por chave e usa o valor retornado para definir uma propriedade.
private void myButton_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
Dim buttonControl = DirectCast(sender, Button)
buttonControl.Background = DirectCast(Me.FindResource("RainbowBrush"), Brush)
End Sub
Um método alternativo para atribuir uma referência de recurso é SetResourceReference. Esse método usa dois parâmetros: a chave do recurso e o identificador de uma propriedade de dependência específica que está presente na instância do elemento à qual o valor do recurso deve ser atribuído. Funcionalmente, este método é o mesmo e tem a vantagem de não exigir qualquer casting de valores de retorno.
Outra maneira de acessar recursos programaticamente é acessar o conteúdo da propriedade Resources como um dicionário. Os dicionários de recursos são usados para adicionar novos recursos a coleções existentes, verificar se um determinado nome de chave já é usado pela coleção e outras operações. Se você estiver escrevendo um aplicativo WPF inteiramente em código, você também pode criar toda a coleção em código, atribuir recursos a ele. A coleção pode então ser atribuída à propriedade Resources de um elemento. Isso é descrito na próxima seção.
Você pode indexar dentro de qualquer Resources coleção, usando uma chave específica como índice. Os recursos acessados dessa maneira não seguem as regras normais de tempo de execução da resolução de recursos. Você está acessando apenas essa coleção específica. A pesquisa de recursos não passa pelo âmbito de recursos até à raiz ou ao aplicativo se nenhum objeto válido for encontrado na chave solicitada. No entanto, esta abordagem pode ter vantagens de desempenho em alguns casos, precisamente porque o âmbito da procura da chave é mais restrito. Para obter mais informações sobre como trabalhar diretamente com um dicionário de recursos, consulte a ResourceDictionary classe.
Criando recursos com código
Se você quiser criar um aplicativo WPF inteiro no código, você também pode querer criar quaisquer recursos nesse aplicativo no código. Para conseguir isso, crie uma nova instância de ResourceDictionary e, em seguida, adicione todos os recursos ao dicionário usando chamadas sucessivas para ResourceDictionary.Add. Em seguida, atribua o ResourceDictionary criado a definir a propriedade Resources em um elemento que está presente num escopo de página ou no Application.Resources. Você também pode manter o ResourceDictionary como um objeto autônomo sem adicioná-lo a um elemento. No entanto, se você fizer isso, você deve acessar os recursos dentro dele por chave de item, como se fosse um dicionário genérico. Um ResourceDictionary que não está anexado a uma propriedade Resources não existe como parte da árvore de elementos e não tem escopo numa sequência de pesquisa que pode ser usada por FindResource e métodos relacionados.
Usando objetos como chaves
A maioria dos usos de recursos definirá a chave do recurso como uma cadeia de caracteres. No entanto, vários recursos do WPF usam deliberadamente o tipo de objeto como uma chave em vez de uma cadeia de caracteres. A capacidade de ter o recurso associado a um tipo de objeto é utilizada pelo estilo e suporte a temas do WPF. Os estilos e temas que se tornam o padrão para um controle sem estilo são associados individualmente com o Type do controle ao qual devem se aplicar.
Ser chaveado por tipo fornece um mecanismo de pesquisa confiável que funciona em instâncias padrão de cada tipo de controle. O tipo pode ser detetado por reflexão e usado para estilizar classes derivadas, mesmo que o tipo derivado não tenha estilo padrão. Você pode especificar uma chave Type para um recurso definido em XAML usando o x:Type Markup Extension. Existem extensões semelhantes para outros usos de chave sem cadeia de caracteres que suportam recursos WPF, como ComponentResourceKey Markup Extension.
Para obter mais informações, consulte Styles, DataTemplates e chaves implícitas.
Ver também
.NET Desktop feedback