【问题标题】:Binding to TemplatedParent within a ControlTemplate.Resources在 ControlTemplate.Resources 中绑定到 TemplatedParent
【发布时间】:2012-11-21 21:07:04
【问题描述】:

我有一个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。
绑定表达式:路径=范围;数据项=空;目标元素是 '计算器' (HashCode=33746798);目标属性是“范围”(类型 '范围')
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
绑定表达式:路径=数据源;数据项=空;目标元素是 '计算器' (HashCode=33746798);目标属性是“数据源” (类型“IEnumerable”)

我不确定如何解决这个问题,所以任何帮助都将不胜感激!

【问题讨论】:

  • 您的错误表明 targetElement 是“计算器”,但您的 ControlTemplate 是针对“local:IndicatorBar”键入的。这两个对象在您的树中如何关联?
  • 描述上下文的代码太少。请发布您如何使用此模板(例如 XAML 中使用的 IndicatorBar 类型)以及您设置其 Ranges 和 DataSource 属性的代码。
  • 如果你有计算器的源代码,那么我可能会将它作为一个多值转换器,将两个集合作为参数。然后你可以做你的 ItemsSource 绑定传递转换器。
  • Calculator 类中的 Ranges 和 Datasource 属性是依赖属性吗?
  • @BillTarbell 如果您在 XAML 中看到,我有一个计算器正在处理控件的输入,然后将边框绑定到计算器的输出。

标签: c# wpf xaml


【解决方案1】:

首先,您的绑定使用 RelativeSource.TemplatedParent 模式,因此绑定的来源是您应用此模板的控件。我认为 TemplatedParent 不适合您的情况。 请参阅此link 以了解TemplatedParent 的使用。 您能否添加包含您的数据的模型以绑定到计算器控件?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多