У меня проблема с ToolTip в моем стиле DataGridCell. Когда я пытаюсь показать содержимое ячейки в подсказке, это содержимое исчезает. Я должен показать эту подсказку в каждой ячейке, и я создаю столбцы динамически, поэтому я не могу привязываться к любому имени свойства. Вот мой фрагмент:
<Style x:Key="dgCellStyle" TargetType="{x:Type Controls:DataGridCell}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Controls:DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid Background="{TemplateBinding Background}">
<ToolTipService.ToolTip>
<ContentControl Content="{TemplateBinding Content}" />
</ToolTipService.ToolTip>
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Margin="0,2"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource {ComponentResourceKey ResourceId=FocusBorderBrushKey, TypeInTargetAssembly={x:Type Controls:DataGrid}}}"/>
</Trigger>
</Style.Triggers>
</Style>
Кто-нибудь есть идеи? благодаря
Если вы хотите добавить подсказку в DataGridTextColumn
,
вы можете использовать DataGridTextColumn.CellStyle property
,
См. Ниже фрагмент кода:
<DataGridTextColumn Header="ScreenName" Binding="{Binding Name}" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding Age}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Или вы можете пройти через эту ссылку
Обновить :-
если вы динамически генерируете столбцы, вы можете обрабатывать событие MouseMove
в сетке.
Затем вы можете преобразовать координаты мыши в дескриптор строки и соответствующим образом изменить подсказку.
Something like
:
private void dataGrid_MouseMove(object sender, MouseEventArgs e) {
var point = dataGrid.PointToClient(e.X, e.Y);
var hittest = dataGrid.HitTest(point.X, point.Y);
toolTip1.SetToolTip(dataGrid, hittest.Row); // **add Tooltip control to the Application!!!**
}