wpf datagridtextcolumnツールチップ
-
27-10-2019 - |
質問
DatagridColumnヘッダーにツールチップを追加し、ソート機能を保持する方法はありますか。以下のコードは機能しません(ツールチップは表示されません)
<toolkit:DataGridTextColumn Header="Test" Width="70" Binding="{Binding TestText}" ToolTipService.ToolTip="{Binding TestText}">
そして、以下のコードを使用するとき
<toolkit:DataGridTemplateColumn Header="Test" Width="70">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TestText}" ToolTip="{Binding TestText}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
列はソート機能を失います。
解決
グリッドが自動列を作成すると、その列にどのフィールドが表示されているかがわかります。列を自分で作成すると、データグリッドはその列に表示されるデータがわからないため、列をソートするフィールドを推測できません。列を作成するには、自分自身をソート可能に定義するには、 SortMemberPath
あなたへの財産 DataGridTemplateColumn
このような:
<DataGridTemplateColumn Header="Test" Width="70" SortMemberPath="TestText">
...
</DataGridTemplateColumn>
他のヒント
を取得します ToolTip
に表示します DataGridColumnHeader
あなたはバインドする必要があります ToolTip
それのためのプロパティ ToolTip
その DataGridColumn
このような
<toolkit:DataGridTextColumn Header="Test"
Width="70"
Binding="{Binding TestText}"
ToolTipService.ToolTip="My Tooltip Text">
<toolkit:DataGridTextColumn.HeaderStyle>
<Style TargetType="toolkit:DataGridColumnHeader">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=Column.(ToolTipService.ToolTip)}"/>
</Style>
</toolkit:DataGridTextColumn.HeaderStyle>
</toolkit:DataGridTextColumn>
ヘッダーではなく、列テンプレートにツールチップを追加します。
DatagridColumnのHeaderSyleプロパティを、HeaderCellのツールチップを含むテンプレートを含むスタイルに設定してみましたか?
以前の回答はほとんど正しいですが、私はそれらを過度に複雑にするか、投稿の2つの懸念のうちの1つだけに対処していると思います。
まず、いつでも設定できます SortPath
aの選別を維持するためのプロパティ DataGridTemplateColumn
, 、または表示されるもの以外のプロパティでソートしたい場合。
第二に、あなたは必要ありません DataGridTemplateColumn
OPのような列ヘッダーにツールチップを置くため。実際のセルにツールチップを追加する場合は、テンプレート列を使用する場合があります(ただし、これもおそらく必要ありません)。いずれにせよ、列ヘッダーにツールチップを追加することは、HeaderSyleによって最も簡単に実現されます
<DataGridTextColumn Header="Test" Binding="{Binding TestText}">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ToolTip" Value="Test ToolTip" />
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>