Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você pode usar a classe PropertyPath e a sintaxe da cadeia de caracteres para instanciar um valor PropertyPath em XAML ou em código. Os valores PropertyPath são usados pela associação de dados. Uma sintaxe semelhante é usada para direcionar animações com storyboard. Para ambos os cenários, um caminho de propriedade descreve uma travessia de uma ou mais relações objeto-propriedade que acabam por resolver numa única propriedade.
Você pode definir um caminho de propriedade diretamente para um atributo em XAML. Você pode usar a mesma sintaxe de cadeia de caracteres para construir um PropertyPath que define uma Binding no código ou para definir um destino de animação no código usando SetTargetProperty. Existem duas áreas de funcionalidades distintas no Windows Runtime que usam um caminho de propriedades: ligação de dados e direcionamento de animação. A segmentação por animação não cria valores de sintaxe de caminho de propriedade subjacentes na implementação do Tempo de Execução do Windows; as informações são mantidas como uma cadeia de caracteres, mas os conceitos de navegação entre propriedade de objeto são muito semelhantes. A vinculação de dados e a animação direcionada a cada uma avaliam um caminho de propriedade de forma ligeiramente diferente, portanto, descrevemos a sintaxe do caminho de propriedade separadamente para cada um.
Caminho da propriedade para objetos na vinculação de dados
No Windows Runtime, pode associar-se ao valor alvo de qualquer propriedade de dependência. O valor da propriedade de origem para uma associação de dados não precisa ser uma propriedade de dependência; ele pode ser uma propriedade em um objeto de negócios (por exemplo, uma classe escrita em uma linguagem Microsoft .NET ou C++). Ou, o objeto de origem para o valor de associação pode ser um objeto de dependência existente já definido pelo aplicativo. A origem pode ser referenciada por um nome de propriedade simples ou por um percurso das relações entre objeto e propriedade no grafo do objeto de negócio.
Você pode vincular a um valor de propriedade individual ou pode vincular a uma propriedade de destino que armazena listas ou coleções. Se sua origem for uma coleção, ou se o caminho especificar uma propriedade de coleção, o mecanismo de vinculação de dados fará a correspondência entre os itens de coleção da origem e o destino de vinculação, resultando em um comportamento como preencher uma ListBox com uma lista de itens de uma coleção de fonte de dados sem a necessidade de antecipar os itens específicos dessa coleção.
Atravessando um gráfico de objetos
O elemento da sintaxe que denota a travessia de uma relação objeto-propriedade em um gráfico de objeto é o caractere ponto (.). Cada ponto em uma cadeia de caracteres de caminho de propriedade indica uma divisão entre um objeto (lado esquerdo do ponto) e uma propriedade desse objeto (lado direito do ponto). A cadeia de caracteres é avaliada da esquerda para a direita, o que permite percorrer várias relações objeto-propriedade. Vejamos um exemplo:
"{Binding Path=Customer.Address.StreetAddress1}"
Veja como esse caminho é avaliado:
- O objeto de contexto de dados (ou uma fonte especificada pela mesma ligação) é pesquisado por uma propriedade chamada "Customer".
- O objeto que é o valor da propriedade "Customer" é pesquisado por uma propriedade chamada "Address".
- O objeto que é o valor da propriedade "Address" é procurado por uma propriedade chamada "StreetAddress1".
Em cada uma dessas etapas, o valor é tratado como um objeto. O tipo do resultado é verificado somente quando a associação é aplicada a uma propriedade específica. Este exemplo falharia se "Address" fosse apenas um valor de cadeia de caracteres que não expusesse qual parte da cadeia de caracteres era o endereço da rua. Normalmente, a ligação está direcionada para os valores específicos de propriedades aninhadas de um objeto de negócios que tem uma estrutura de informações conhecida e deliberadamente projetada.
Regras para as propriedades em um caminho de propriedade de vinculação de dados
- Todas as propriedades referenciadas por um caminho de propriedade devem ser públicas no objeto de negócios de origem.
- A propriedade end (a propriedade que é a última propriedade nomeada no caminho) deve ser pública e deve ser mutável – você não pode vincular a valores estáticos.
- A propriedade final deve ser leitura/escrita se este caminho for utilizado como a informação Path para uma associação bidirecional.
Indexadores
Um caminho de propriedade para vinculação de dados pode incluir referências a propriedades indexadas. Isso permite a vinculação a listas/vetores ordenados ou a dicionários/mapas. Use caracteres "[]" entre colchetes para indicar uma propriedade indexada. O conteúdo desses colchetes pode ser um inteiro (para lista ordenada) ou uma cadeia de caracteres sem aspas (para dicionários). Você também pode ligar a um dicionário onde a chave é um inteiro. Você pode usar diferentes propriedades indexadas no mesmo caminho com um ponto separando a propriedade do objeto.
Por exemplo, considere um objeto de negócios onde há uma lista de "Equipes" (lista ordenada), cada uma das quais tem um dicionário de "Jogadores" onde cada jogador é digitado pelo sobrenome. Um exemplo de caminho de propriedade para um jogador específico na segunda equipa é: "Teams[1].Players[Smith]". (Você usa 1 para indicar o segundo item em "Teams" porque a lista é baseada em índice zero.)
Observação
O suporte à indexação para fontes de dados C++ é limitado; consulte Vinculação de dados em profundidade.
Propriedades anexadas
Os caminhos de propriedade podem incluir referências a propriedades anexadas. Como o nome de identificação de uma propriedade anexada já inclui um ponto, você deve colocar qualquer nome de propriedade anexado entre parênteses para que o ponto não seja tratado como uma etapa de propriedade de objeto. Por exemplo, a cadeia de caracteres para especificar que você deseja usar Canvas.ZIndex como um caminho de ligação é "(Canvas.ZIndex)". Para obter mais informações sobre propriedades anexadas, consulte Visão geral de propriedades anexadas.
Combinação da sintaxe de caminho de propriedade
Você pode combinar vários elementos da sintaxe do caminho da propriedade em uma única cadeia de caracteres. Por exemplo, você pode definir um caminho de propriedade que faça referência a uma propriedade anexada indexada, se sua fonte de dados tiver essa propriedade.
Depurando um caminho de propriedade de ligação
Como um caminho de propriedade é interpretado por um mecanismo de vinculação e depende de informações que podem estar presentes apenas em tempo de execução, muitas vezes você deve depurar um caminho de propriedade para vinculação sem poder confiar no suporte convencional em tempo de design ou tempo de compilação nas ferramentas de desenvolvimento. Em muitos casos, o resultado em tempo de execução da falha na resolução de um caminho de propriedade é um valor em branco sem erro, porque esse é o comportamento de fallback por design da resolução de vinculação. Felizmente, o Microsoft Visual Studio fornece um modo de saída de depuração que pode isolar qual parte de um caminho de propriedade que está especificando uma fonte de vinculação não conseguiu resolver. Para obter mais informações sobre como usar esse recurso de ferramenta de desenvolvimento, consulte a seção "Depuração" de Vinculação de dados em profundidade.
Caminho da propriedade para direcionamento de animação
As animações dependem de direcionar uma propriedade de dependência na qual os valores de storyboard são aplicados quando a animação é executada. Para identificar o objeto onde existe a propriedade a ser animada, a animação tem como alvo um elemento por nome (atributo x:Name). Muitas vezes, é necessário definir um caminho de propriedade que começa com o objeto identificado como Storyboard.TargetName e termina com o valor da propriedade de dependência específica onde a animação deve ser aplicada. Esse caminho de propriedade é usado como o valor de Storyboard.TargetProperty.
Para saber mais sobre como definir animações em XAML, veja Animações com storyboard.
Segmentação simples
Se estiveres a animar uma propriedade que existe no próprio objecto alvo e o tipo dessa propriedade permitir que uma animação seja aplicada diretamente a ela (em vez de a uma subpropriedade do valor de uma propriedade), então podes simplesmente nomear a propriedade que está a ser animada sem qualquer especificação adicional. Por exemplo, se estiveres a direcionar uma subclasse Shape como Rectangle, e estiveres a aplicar uma Color animada à propriedade Fill, o caminho da propriedade pode ser "Fill".
Alocação indireta de propriedade
Você pode animar uma propriedade que é uma subpropriedade do objeto de destino. Em outras palavras, se houver uma propriedade do objeto de destino que seja um objeto em si, e esse objeto tiver propriedades, você deverá definir um caminho de propriedade que explique como percorrer essa relação objeto-propriedade. Sempre que estiver especificando um objeto onde deseja animar uma subpropriedade, coloque o nome da propriedade entre parênteses e especifique a propriedade em typename. formato propertyname . Por exemplo, para especificar que você deseja o valor do objeto da propriedade RenderTransform de um objeto de destino, especifique "(UIElement.RenderTransform)" como a primeira etapa no caminho da propriedade. Este ainda não é um caminho completo, porque não há animações que possam ser aplicadas diretamente a um valor Transform . Para este exemplo, complete agora o caminho da propriedade para que a propriedade final seja uma propriedade de uma subclasse Transform que possa ser animada por um valor Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
Especificando um filho específico em uma coleção
Para especificar um item filho em uma propriedade de coleção, você pode usar um indexador numérico. Utilize caracteres de colchetes "[]" ao redor do valor do índice inteiro. Só pode fazer referência a listas ordenadas, não a dicionários. Como uma coleção não é um valor animável, o uso de um indexador nunca pode ser a propriedade terminal num percurso de propriedade.
Por exemplo, para especificar que o utilizador deseja animar o primeiro ponto de paragem de cor em um LinearGradientBrush aplicado à propriedade Background de um controlo, este é o caminho da propriedade: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Observe como o indexador não é a última etapa no caminho e que a última etapa particularmente deve fazer referência à propriedade GradientStop.Color do item 0 da coleção para aplicar um valor animado Color a ele.
Animando uma propriedade anexada
Não é um cenário comum, mas é possível animar uma propriedade anexada, desde que essa propriedade anexada tenha um valor de propriedade que corresponda a um tipo de animação. Como o nome de identificação de uma propriedade anexada já inclui um ponto, você deve colocar qualquer nome de propriedade anexado entre parênteses para que o ponto não seja tratado como uma etapa de propriedade de objeto. Por exemplo, a cadeia de caracteres para especificar que você deseja animar a propriedade anexada Grid.Row em um objeto, use o caminho da propriedade "(Grid.Row)".
Observação
Neste exemplo, o valor de Grid.Row é um tipo de propriedade Int32 . então não podes animá-lo com uma animação Double. Em vez disso, você definiria um ObjectAnimationUsingKeyFrames que tenha componentes DiscreteObjectKeyFrame , onde o ObjectKeyFrame.Value é definido como um inteiro como "0" ou "1".
Regras para as propriedades em uma animação visando o caminho de propriedades
- O ponto de partida assumido do percurso da propriedade é o objeto identificado por um Storyboard.TargetName.
- Todos os objetos e propriedades referenciados ao longo do caminho da propriedade devem ser públicos.
- A propriedade end (a propriedade que é a última nomeada no caminho) deve ser pública, permitida para leitura e escrita, e ser uma propriedade de dependência.
- A propriedade end deve ter um tipo de propriedade que possa ser animado por uma das classes amplas de tipos de animação (animações coloridas , animações duplas , animações de ponto , ObjectAnimationUsingKeyFrames).
A classe PropertyPath
A classe PropertyPath é o tipo de propriedade subjacente de Binding.Path para o cenário de vinculação.
Na maioria das vezes, você pode aplicar um PropertyPath em XAML sem usar nenhum código. Mas, em alguns casos, você pode querer definir um objeto PropertyPath usando código e atribuí-lo a uma propriedade em tempo de execução.
PropertyPath possui o construtor PropertyPath(String) e não possui um construtor padrão. A cadeia de caracteres que você passa para esse construtor é uma cadeia de caracteres que é definida usando a sintaxe do caminho da propriedade, como explicamos anteriormente. Essa também é a mesma cadeia de caracteres que você usaria para atribuir Path como um atributo XAML. A única outra API da classe PropertyPath é a propriedade Path , que é somente leitura. Você pode usar essa propriedade como a cadeia de caracteres de construção para outra instância de PropertyPath .
Tópicos relacionados
Windows developer