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スタイルがあります。たとえば、ここで2番目のバインディングパラメータはフィールドであり、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 に答える