XamDataGrid CellValuPresenter工具提示样式

时间:2012-09-17 20:57:27

标签: wpf binding infragistics

我正在尝试为我的XamDataGrid创建一个样式,以便我可以根据当前正在悬停的单元格确定要在工具提示中显示的值。

我正在尝试以下内容:

<Style x:Key="MyCVPStyle" TargetType="{x:Type igDP:CellValuePresenter}">
        <Setter Property="ToolTip">
            <Setter.Value>
                <StackPanel>
                    <ListView ItemsSource="{Binding RelativeSource={...}, Path=Field, Converter={StaticResource MyFieldConverter}}">
...

样式的DataContext设置为DataRecord。我遇到的问题是我不知道如何访问单元格值演示器的实际字段。

我尝试将源设置为:

{Binding RelativeSource={RelativeSource AncestorType={x:Type igDP:CellValuePresenter}}, Path=Field

但失败并出现绑定错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Infragistics.Windows.DataPresenter.CellValuePresenter', AncestorLevel='1''. BindingExpression:Path=Field; DataItem=null; target element is 'ListView' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')

如何访问/绑定到CellValuePresenter.Field,以便将该值传递给我的转换器?

作为参考,我有其他CellValuePresenter样式,在我访问Field时没有问题。例如,这里的第二个绑定参数是Field,通过引用Self来访问:

<Setter Property="BorderThickness">
  <Setter.Value>
    <MultiBinding Converter="{StaticResource BorderThicknessConverter}">
      <MultiBinding.Bindings>
        <Binding Path="DataItem" />
        <Binding RelativeSource="{RelativeSource Self}" Path="Field" />
      </MultiBinding.Bindings>
    </MultiBinding>
  </Setter.Value>
</Setter>

3 个答案:

答案 0 :(得分:4)

您可以使用ToolTip的PlacementTarget属性,它将是CellValuePresenter,并将其设置为ListView绑定到的DataContext:

<Setter Property="ToolTip">
    <Setter.Value>
        <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}">
            <StackPanel>
                <ListView ItemsSource="{Binding Path=Field, Converter={StaticResource MyFieldConverter}}"></ListView>
            </StackPanel>
        </ToolTip>
    </Setter.Value>
</Setter>

答案 1 :(得分:1)

我发现了另一种我认为更直接的解决方案。

创建以下样式(我相信您尝试将ItemsSource绑定到的属性名为Field)

<Style x:Key="MyCVPStyle" TargetType="{x:Type igDP:CellValuePresenter}">
    <Setter Property="ToolTip">
        <Setter.Value>
            <StackPanel>
                <ListView ItemsSource="{Binding Path=Cells[Field].Value}" />
            </StackPanel>
        </Setter.Value>
    </Setter>
</Style>

但这确实要求您将ItemsSource绑定到FieldLayout.Fields中定义的字段。您可能希望将该字段的“可见性”设置为折叠。我还包括了应用了工具提示样式的字段。

<igDP:Field Label="Value" Name="Value" >
    <igDP:Field.Settings>
        <igDP:FieldSettings CellValuePresenterStyle="{StaticResource ResourceKey=MyCVPStyle}" />
    </igDP:Field.Settings>
</igDP:Field>
<igDP:Field Label="Field" Name="Field" Visibility="Collapsed" />

答案 2 :(得分:0)

您可以为XamDataGrid中的不同字段使用不同的样式,以便已为特定字段设置每个样式。

绑定失败的原因是因为工具提示在弹出窗口中显示,因此它是另一个窗口,而不是与CellValuePresenter在同一个可视树中。