C# 绑定到ControlTemplate内的TemplatedParent。资源
我有一个C# 绑定到ControlTemplate内的TemplatedParent。资源,c#,wpf,xaml,C#,Wpf,Xaml,我有一个ControlTemplate,在其中我想将两个集合合并成一个集合,然后绑定到ItemsControl。计算由Calculator对象完成,我在模板的ResourceDictionary中创建了该对象的实例 <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:IndicatorBar}"> <Cont
ControlTemplate
,在其中我想将两个集合合并成一个集合,然后绑定到ItemsControl
。计算由Calculator
对象完成,我在模板的ResourceDictionary
中创建了该对象的实例
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:IndicatorBar}">
<ControlTemplate.Resources>
<local:Calculator
x:Key="_calculator"
Ranges="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Ranges}"
DataSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataSource}" />
</ControlTemplate.Resources>
<ItemsControl ItemsSource="{Binding Ratios, Source={StaticResource _calculator}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{Binding Range}">
<TextBlock Text="{Binding Ratio}" Foreground="White" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ControlTemplate>
</Setter.Value>
</Setter>
但是,这似乎不起作用,并导致绑定错误:
System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:路径=范围;DataItem=null;目标元素是 “计算器”(HashCode=33746798);目标属性为“范围”(类型 “范围”)
System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。
BindingExpression:Path=DataSource;DataItem=null;目标元素是 “计算器”(HashCode=33746798);目标属性为“数据源” (键入“IEnumerable”)
我不知道我如何才能绕过这个问题,所以任何帮助都将不胜感激 首先,使用RelativeSource.TemplatedParent模式进行绑定,因此绑定的源是应用此模板的控件。我认为TemplatedParent不适合您的情况。 请参阅此文档以了解模板家长的使用。
是否可以添加包含绑定到计算器控件的数据的模型?错误显示targetElement为“Calculator”,但您的控件模板键入的是“local:IndicatorBar”。这两个对象在树中是如何关联的?代码太少,无法描述上下文。请发布您如何使用此模板(例如,XAML中使用的IndicatorBar类型)以及设置其范围和数据源属性的代码。如果您有计算器的源代码,那么我可能会将其作为一个多值转换器,将两个集合作为参数。然后您可以通过转换器执行ItemsSource绑定。Calculator类中的范围和Datasource属性是依赖属性?@BillTarbell如果您在XAML中看到,我有一个计算器正在处理控件的输入,然后边框绑定到计算器的输出。