Eu desenvolvo um controle personalizado que tem uma propriedade de dependência
public static readonly DependencyProperty StateBorderBrushProperty =
DependencyProperty.Register("StateBorderBrush", typeof(Brush), typeof(SmartCanvas),
new FrameworkPropertyMetadata(Brushes.Transparent,
FrameworkPropertyMetadataOptions.None));
O problema surge quando eu tento definir ControlTemplate do meu controle de fora xaml como
<ControlTemplate TargetType="controls:SmartPrimitive">
<Grid>
<ContentPresenter/>
<Border BorderBrush="{TemplateBinding StateBorderBrush}" BorderThickness="2"/>
</Grid>
</ControlTemplate>
Parece "XamlParseException: a chave fornecida não estava presente no dicionário" na string com TemplateBinding acima. O que pode estar errado?
Respostas:
1 para resposta № 1Você perdeu o {x:Type }
declaração
<ControlTemplate TargetType="{x:Type controls:SmartPrimitive}">
<Grid>
<ContentPresenter/>
<Border BorderBrush="{TemplateBinding StateBorderBrush}" BorderThickness="2"/>
</Grid>
</ControlTemplate>
Isso significa que você está fornecendo uma string para o TargetType em vez de um tipo
A extensão de marcação x: Type fornece um comportamento de conversão de string para propriedades que usam o tipo Type. A entrada é do tipo XAML.
http://msdn.microsoft.com/en-us/library/ms753322%28v=vs.110%29.aspx
1 para resposta № 2
Acabei de escrever errado com o tipo do proprietário DependencyProperty. Deve ser SmartPrimitive, não SmartCanvas, mas ... A exceção do WPF pode ser mais informativa.