Добавление функции подсказки в элемент управления wpf, который не происходит от FrameworkElement - PullRequest
0 голосов
/ 07 марта 2012

Я работаю над пользовательским классом, который происходит от DataGridColumn. Базовый класс для DataGridColumn - DependencyObject. Как таковой, он не имеет свойства всплывающей подсказки.

Я хочу, чтобы у моего пользовательского класса было свойство Tooltip. На самом деле, я хочу, чтобы оно также имело свойство ToolTipTemplate, которое является DataTemplate, которое можно использовать для создания всплывающей подсказки. Как мне добавить эту функциональность в мой класс?

Tony

1 Ответ

1 голос
/ 07 марта 2012

Это распространенное заблуждение, что DataGridColumn, являющийся объектом зависимости, является частью визуального дерева.Это не.Таким образом, даже если мы создадим наследуемое свойство зависимостей (точно так же как DataContext или FlowDirection, которое автоматически распространяется вниз по визуальному родительскому элементу к его дочерним элементам), новое свойство ToolTip не будет переходить к отдельнымячейки, поскольку эти ячейки не являются дочерними элементами столбца таблицы данных.

Итак, теперь, когда мы это знаем, остался только один путь - добавить привязку в CellStyle и привязать к свойству self Column.ToolTip.Если вы решили использовать ToolTipTemplate, вы можете добавить ContentControl и затем связать его с шаблоном контента.

Примерно так ...

   <tk:DataGrid x:Name="MyDataGrid" RowHeaderWidth="15"
                ItemsSource="{StaticResource MyData}"
                AutoGenerateColumns="False">
        <tk:DataGrid.CellStyle>
            <Style TargetType="{x:Type tk:DataGridCell}">
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <ContentControl 
                             ContentTemplate="{Binding Column.ToolTipTemplate,
                                 RelativeSource={RelativeSource FindAncestor,
                                     AncestorType={x:Type tk:DataGridCell}}}"/>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger
                             Binding="{Binding Column.ToolTipTemplate,
                                 RelativeSource={RelativeSource Self}}"
                                 Value="{x:Null}">
                        <Setter Property="ToolTip" Value="{x:Null}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </tk:DataGrid.CellStyle>
        ....
    </tk:DataGrid>
...