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.
Pré-requisitos
Supomos que você possa adicionar controles à sua interface do usuário, definir suas propriedades e anexar manipuladores de eventos. Para obter instruções sobre como adicionar controles ao seu aplicativo, consulte Adicionar controles e manipular eventos. Também assumimos que você sabe o básico de como definir um modelo personalizado para um controle fazendo uma cópia do modelo padrão e editando-o. Para obter mais informações sobre isso, consulte Modelos de controle.
O cenário para classes TemplateSettings
As classes TemplateSettings fornecem um conjunto de propriedades que são usadas quando você define um novo modelo de controle para um controle. As propriedades têm valores como medidas de pixel para o tamanho de determinadas partes do elemento da interface do usuário. Os valores às vezes são valores calculados que vêm da lógica de controle que normalmente não é fácil de substituir ou mesmo acessar. Algumas das propriedades são destinadas como valores From e To que controlam transições e animações de partes e, portanto, as propriedades TemplateSettings relevantes vêm em pares.
Existem várias classes TemplateSettings . Todos eles estão no . Xaml.Controls.Primitives namespace. Cada classe tem uma propriedade TemplateSettings associada no controle relevante. Essa propriedade TemplateSettings é como você acessa os valores TemplateSettings para o controle e pode estabelecer associações de modelo para suas propriedades.
Aqui estão alguns exemplos de classes e propriedades relacionadas:
- ComboBoxTemplateSettings: valor de ComboBox.TemplateSettings
- GridViewItemTemplateSettings: valor de GridViewItem.TemplateSettings
- ListViewItemTemplateSettings: valor de ListViewItem.TemplateSettings
- ToggleSwitchTemplateSettings: valor de ToggleSwitch.TemplateSettings
- ToolTipTemplateSettings: valor de ToolTip.TemplateSettings
As propriedades TemplateSettings são sempre destinadas a serem usadas em XAML, não em código. Eles são subpropriedades de leitura única da propriedade TemplateSettings de um controlo pai, que é também de leitura única. Para um cenário de controle personalizado avançado, onde você está criando uma nova classe baseada em controle e, portanto, pode influenciar a lógica de controle, considere definir uma propriedade TemplateSettings personalizada no controle para comunicar informações que podem ser úteis para qualquer pessoa que esteja remodelando o controle. Como o valor somente leitura dessa propriedade, defina uma nova classe TemplateSettings relacionada ao seu controle que tenha propriedades somente leitura para cada um dos itens informativos relevantes para medições de modelo, posicionamento de animação e assim por diante, e forneça aos chamadores a instância em tempo de execução dessa classe que é inicializada usando sua lógica de controle. As classes TemplateSettings são derivadas de DependencyObject, para que as propriedades possam usar o sistema de propriedades de dependência para callbacks de alteração de propriedade. Mas os identificadores de propriedade de dependência para as propriedades não são expostos como API pública, porque as propriedades TemplateSettings são destinadas a serem de leitura apenas para os chamadores.
Como usar TemplateSettings em um modelo de controle
Aqui está um exemplo que vem dos modelos de controle XAML padrão inicial. Este em particular é do modelo padrão do ProgressRing:
<Ellipse
x:Name="E1"
Style="{StaticResource ProgressRingEllipseStyle}"
Width="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseDiameter}"
Height="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseDiameter}"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseOffset}"
Fill="{TemplateBinding Foreground}"/>
O XAML completo para o modelo ProgressRing tem centenas de linhas, portanto, este é apenas um pequeno trecho. Este XAML define uma parte de controle que é um dos 6 elementos Ellipse que retratam a animação giratória para progresso indeterminado. Como desenvolvedor, você pode não gostar dos círculos e pode usar uma primitiva gráfica diferente ou uma forma básica diferente para como a animação progride. Por exemplo, você pode compor um ProgressRing que usa um conjunto de elementos Rectangle dispostos em um quadrado. Em caso afirmativo, cada componente Retângulo individual do seu novo modelo pode ter esta aparência:
<Rectangle
x:Name="R1"
Width="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseDiameter}"
Height="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseDiameter}"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.EllipseOffset}"
Fill="{TemplateBinding Foreground}"/>
A razão pela qual as propriedades TemplateSettings são úteis aqui é porque são valores calculados provenientes da lógica de controle básica de ProgressRing. O cálculo está dividindo o ActualWidth e o ActualHeight gerais do ProgressRing e atribuindo uma medição calculada para cada um dos elementos de movimento nos seus modelos, de forma que as partes do modelo possam ser dimensionadas de acordo com o conteúdo.
Aqui está outro exemplo de uso dos modelos de controle XAML padrão, desta vez mostrando um dos conjuntos de propriedades que são De e Para de uma animação. Isso é do modelo padrão ComboBox :
<VisualStateGroup x:Name="DropDownStates">
<VisualState x:Name="Opened">
<Storyboard>
<SplitOpenThemeAnimation
OpenedTargetName="PopupBorder"
ContentTargetName="ScrollViewer"
ClosedTargetName="ContentPresenter"
ContentTranslationOffset="0"
OffsetFromCenter="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.DropDownOffset}"
OpenedLength="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.DropDownOpenedHeight}"
ClosedLength="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=TemplateSettings.DropDownClosedHeight}" />
</Storyboard>
</VisualState>
...
</VisualStateGroup>
Novamente, há muito XAML no modelo, então mostramos apenas um trecho. E este é apenas um dos vários estados e animações de tema que usam as mesmas propriedades ComboBoxTemplateSettings . Para ComboBox, o uso dos valores ComboBoxTemplateSettings por meio de associações impõe que as animações relacionadas no modelo parem e comecem em posições baseadas em valores compartilhados e, portanto, façam uma transição suave.
Observação
Quando utilizar valores TemplateSettings como parte do seu modelo de controlo, certifique-se de que está a definir propriedades que correspondam ao tipo do valor. Caso contrário, talvez seja necessário criar um conversor de valor para a associação para que o tipo de destino da associação possa ser convertido de um tipo de origem diferente do valor TemplateSettings . Para obter mais informações, consulte IValueConverter.
Tópicos relacionados
Windows developer