1

我正在尝试为我的 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,通过引用 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>
4

3 回答 3

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>
于 2012-09-18T03:09:03.213 回答
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" />
于 2014-03-20T15:08:43.757 回答
0

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

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

于 2012-09-17T22:54:35.410 回答