kida atlantis Ответов: 1

Избегайте пустой прямоугольной ячейки datagrid tooltip? Любое предложение


Привет

Я попытался привязать значение свойства к DataGridTextColumn. Если я наведу курсор на DatagridCell с пустой ячейкой.Появляется одна пустая коробка. Это фактический код, который я использую сейчас
<DataGridTextColumn Header="Contact Name" IsReadOnly="True" Binding="{Binding Path=ContactName}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding Path=ContactName}" />
 </Style>
 </DataGridTextColumn.CellStyle>
</DataGridTextColumn>



Что я уже пробовал:

Я попробовал приведенный ниже код , он вообще не показывает всплывающую подсказку. Любая помощь будет оценена по достоинству.Для этого также добавлено пространство имен.
<pre>	<DataGridTextColumn Header="ContactName" IsReadOnly="True" Binding="{Binding Path=ContactName}" ToolTipService.ToolTip="{Binding Path=ContactName}" ToolTipService.IsEnabled="True">                                            <DataGridTextColumn.CellStyle>
                                                
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="ToolTip" Value="{x:Static system:String.Empty}">
<Setter Property="ToolTipService.IsEnabled" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>

1 Ответов

Рейтинг:
4

Dirk Bahle

Я не совсем уверен что вы подразумеваете под пустой ячейкой поэтому я не могу дать точное решение вашей менее точной постановки проблемы но у вас есть по крайней мере 3 варианта для изучения:

1> используйте резервную опцию привязки:
Вы можете указать, чтобы показать определенный элемент данных, когда обычный элемент данных недоступен:
Привязки WPF FallbackValue комплект для связывания - переполнение стека[^]

- Либо используйте FallbackValue как показано в разделе Вопрос связанной страницы или используйте альтернативную привязку через

PriorityBinding
показано в разделе ответов.

2> используйте конвертер: вы всегда можете использовать statndard IValueConverter чтобы сделать по существу ту же логику отображения значения по умолчанию, что и в 1>. Разница в том, что конвертер представляет собой фрагмент кода C#/VB.Net, который дает вам возможность интегрировать различные и более крупные сценарии, если вы видите много разных случаев и хотите реагировать на них по-разному.

3> An
IMultiValueConverter
дает вам наибольшую гибкость и возможности для привязки из нескольких источников и преобразования значений в общий формат. Вот пример, который я только что набрал (не скомпилировал его) - он принимает строку и логическое значение (например, IsEnabled) в качестве входных данных и преобразует их в строку.

[ValueConversion(typeof(string), typeof(string))]
public class ItemTypeDisplayNameToTextConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  {
    if (values == null)
        return Binding.DoNothing;

    if (values.Length != 2)
        return Binding.DoNothing;

    var item = values[0] as string;

    if (item == null)
        return Binding.DoNothing;

    if (values[1] is bool == false)
        return Binding.DoNothing;

    bool isEnabled = (bool)values[1];

	if (isEnabled == false)           // The cell was not enabled
	  return string.Empty;
	
	if (string.IsNUllOrEmtpy(item))  // There was no string being successfully bound
	  return string.Empty;

    return item;
}

  object[] IMultiValueConverter.ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  {
      throw new NotImplementedException();
  }
}


Вы можете скачать пример решения, установить точку останова в конвертере и запустить демонстрацию, если хотите увидеть, как это работает на месте:
InplaceEditBoxLib/ItemTypeDisplayNameToTextConverter.cs at master · Dirkster99/InplaceEditBoxLib · GitHub[^]

Надеюсь, это поможет. Дайте мне знать, если вы смогли решить свою проблему или если вы видите другую проблему.


kida atlantis

Большое спасибо, это помогло мне решить мою проблему.

Dirk Bahle

Нет проблем, рад слышать, что это помогло - Вы должны установить звезды для ответа, чтобы указать ответ для других, которые могут искать решение той же проблемы ...