Всплывающая подсказка DataGridCell происходит исчезновение значения

1

У меня проблема с 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>

Кто-нибудь есть идеи? благодаря

  • 0
    Вам лучше проверить [этот] [1] вопрос. [1]: stackoverflow.com/questions/7173430/…
  • 0
    Спасибо за ответ, но ссылка, которую вы разместили, касается winforms, и мне нужно решение с фреймворком wpf, а не по коду позади, а в виде xaml.
Теги:
wpf
styles
wpfdatagrid

1 ответ

0

Если вы хотите добавить подсказку в 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!!!**
}
  • 0
    Существует проблема с этим способом добавления всплывающей подсказки, потому что я динамически генерирую столбцы, как я писал в основном посте, поэтому я не могу связать текст подсказки с конкретным свойством. Я должен использовать привязку к содержимому ячейки
  • 0
    Проверьте обновленный ответ, вы должны добавить всплывающую подсказку в приложение.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню