Я довольно новичок в WPF, мне есть чему поучиться, и я думаю, что медленно туда добираюсь. У меня есть DataGrid, который используется для отображения и ввода данных пользователем, это довольно сложная Grid, так как она является основным направлением всего приложения. У меня есть несколько столбцов, которые доступны только для чтения, и я использовал CellStyle Setter, чтобы установить для KeyboardNavigation.IsTabStop значение False, чтобы пользовательский фокус был сосредоточен на важных столбцах, и это прекрасно работает. Мне бы хотелось, чтобы пара столбцов только для чтения была гиперссылкой, показывающей всплывающую подсказку и не получавшей фокус, однако я изо всех сил пытаюсь написать XAML, который будет одновременно выполнять все три требования.
В одном из столбцов указывается, есть ли у элемента в строке какие-либо примечания. Я использовал следующий XAML, чтобы отобразить свойство HasNotes в ячейке в DataGridTemplateColumn, а во всплывающей подсказке отобразить актуальные заметки в свойстве Notes:
<DataGridTemplateColumn x:Name="NotesColumn" Header="Notes">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding HasNotes, Mode=OneWay}">
<TextBlock.ToolTip>
<TextBlock Text="{Binding Notes}" MaxWidth="300" TextWrapping="Wrap" />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
Это отлично работает, но я бы хотел сделать его гиперссылкой, чтобы пользователь мог что-то делать с заметками, когда нажимал на содержимое ячейки.
У меня есть еще один столбец, который представляет собой DataGridHyperlinkColumn, используемый для отображения единиц измерения в гиперссылке, и при нажатии пользователь может изменить эту единицу измерения. (Причина, по которой я сделал это, а не ComboBox, например, заключается в том, что, насколько бы я ни хотел, чтобы пользователь мог менять модуль, я хочу сделать интерфейс таким, чтобы это было очень преднамеренное изменение единица, а не то, что можно сделать случайно). Следующий XAML включает столбец Гиперссылки для Unit
<DataGridHyperlinkColumn x:Name="ResultUnitLink" Binding="{Binding Path=Unit.Code}" Header="Unit" Width="Auto" IsReadOnly="True">
<DataGridHyperlinkColumn.CellStyle>
<Style>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
</Style>
</DataGridHyperlinkColumn.CellStyle>
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<EventSetter Event="Hyperlink.Click" Handler="ChangeUnit" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
Одна проблема с XAML для столбца Гиперссылка заключается в том, что IsTabStop = False не работает, когда при переходе через таблицу столбец с моей гиперссылкой все еще получает фокус, в отличие от других столбцов, в которых я использовал установщик для поменяй IsTabStop. Если толчок настанет, я могу с этим смириться, но я бы не стал.
То, что я на самом деле хочу от обоих этих столбцов, - это объединение двух появлений / поведений, то есть столбцов, в которых данные отображаются по гиперссылке, где TabStop = False и которые отображают всплывающую подсказку с другим свойством при наведении.
Может кто-нибудь помочь мне посоветовать, как получить столбец, который достигает следующего:
- Гиперссылка, отображающая одно свойство
- Подсказка, отображающая другое свойство
- IsTabStop = False, который фактически работает при использовании с гиперссылкой
Заранее спасибо всем, кто может помочь.