我开发了一个具有依赖项属性的自定义控件。
public static readonly DependencyProperty StateBorderBrushProperty =
DependencyProperty.Register("StateBorderBrush", typeof(Brush), typeof(SmartCanvas),
new FrameworkPropertyMetadata(Brushes.Transparent,
FrameworkPropertyMetadataOptions.None));当我试图从xaml外部设置我的控件的ControlTemplate时,问题就出现了,比如
<ControlTemplate TargetType="controls:SmartPrimitive">
<Grid>
<ContentPresenter/>
<Border BorderBrush="{TemplateBinding StateBorderBrush}" BorderThickness="2"/>
</Grid>
</ControlTemplate>听起来像是"XamlParseException:给定的键在字典中不存在“,在上面的TemplateBinding字符串中。有什么不对的?
发布于 2014-11-29 16:09:26
我只是拼错了DependencyProperty所有者的类型。应该是SmartPrimitive,而不是SmartCanvas。但是..。WPF异常可能会提供更多信息。
发布于 2014-11-28 15:32:32
您错过了{x:Type }声明
<ControlTemplate TargetType="{x:Type controls:SmartPrimitive}">
<Grid>
<ContentPresenter/>
<Border BorderBrush="{TemplateBinding StateBorderBrush}" BorderThickness="2"/>
</Grid>
</ControlTemplate>这意味着您要向TargetType提供字符串,而不是类型
x:Type标记扩展为接受类型类型的属性提供了从字符串转换行为。输入是XAML类型。
http://msdn.microsoft.com/en-us/library/ms753322%28v=vs.110%29.aspx
发布于 2021-01-03 14:18:34
在类似的情况下,我也有类似的问题。因此,我搜索了它,发现在这种情况下它不可能是TemplateBinding。
就像Sivasubramanian在这里的回答和解释,-> Using a TemplateBinding in ControlTemplate.Triggers
在TemplateBinding中:仔细观察一下,Max:MyControl.Bar的解析值将充当模板绑定的资源键-- Bar的值不是实际值,而是一个不存在的属性密钥名,因此它抛出错误“给定的键不在字典中”。
因此,基本上,将TemplateBinding更改为绑定
<ControlTemplate TargetType="{x:Type controls:SmartCanvas}">
<Grid>
<ContentPresenter/>
<Border BorderBrush="{Binding StateBorderBrush, UpdateSourceTrigger=PropertyChanged}" BorderThickness="2"/>
</Grid>https://stackoverflow.com/questions/27191777
复制相似问题