微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在WPF中为DataGridColumnHeader创建工具提示?

如何解决如何在WPF中为DataGridColumnHeader创建工具提示?

我发现了如何在WPF中为ToolTip创建DataGridColumnHeader(并确保包头已包好)。

<Style x:Key="StartingTabToolTipHeaderStyle" targettype="DataGridColumnHeader">
   <Setter Property="ToolTip" Value="{x:Static r:Resource.StartingTabToolTip}"/>
   <Setter Property="ContentTemplate">
      <Setter.Value>
         <DataTemplate>
            <TextBlock textwrapping="Wrap" Text="{Binding}"/>
         </DataTemplate>
      </Setter.Value>
   </Setter>
</Style>

我可以通过这种方式使用这种样式:

<DataGridComboBoxColumn Header="{x:Static r:Resource.StartingTab}" SelectedItembinding="{Binding StartingTab}" 
                        HeaderStyle="{StaticResource StartingTabToolTipHeaderStyle}">

解决方案不是很好,因为我需要为每个标头创建一个单独的样式,因为工具提示已硬连接到样式中。我想要一种可以以这种方式使用的通用样式:

<DataGridComboBoxColumn Header="{x:Static r:Resource.StartingTab}" SelectedItembinding="{Binding StartingTab}" 
                        MyToolTip="{x:Static r:Resource.StartingTabToolTip}">

任何想法怎么做?可能带有附加财产?

解决方法

您可以在每列上设置ToolTipService.ToolTip附加属性并将其绑定到该属性,因为该属性未在列上使用。

<DataGridComboBoxColumn Header="{x:Static r:Resource.StartingTab}"
                        SelectedItemBinding="{Binding StartingTab}" 
                        HeaderStyle="{StaticResource StartingTabToolTipHeaderStyle}"
                        ToolTipService.ToolTip="{x:Static r:Resource.StartingTabToolTip}">

然后,您可以使用RelativeSource绑定以标题样式将此文本绑定到列上。

<Style x:Key="StartingTabToolTipHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
   <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip),RelativeSource={RelativeSource Self}}"/>
   <Setter Property="ContentTemplate">
      <Setter.Value>
         <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="{Binding}"/>
         </DataTemplate>
      </Setter.Value>
   </Setter>
</Style>

现在您只有一个样式。如果要避免在每列上设置样式,请省略x:Key使其成为隐式样式。然后它将应用于范围内的所有匹配类型。

<Style TargetType="{x:Type DataGridColumnHeader}">
,

您可以使用DataGridTemplateColumn

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="yourHeader" HeaderStyle={StaticResource HeaderStyle1}">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--you can add any control such as ComboBox,Button etc-->
                    <TextBlock Text="{Binding Message}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <!--Editing cell template is not mandatory,only if you want allow user to edit a particular cell,shown here only for reference-->
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <!--When the user double clicks on this cell,it changes the control to TextBox (from TextBlock - see above) to allow for user input-->
                    <TextBox Text="{Binding Message}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
        <!--Second Column-->
        <DataGridTemplateColumn Header="secondHeader" HeaderStyle={StaticResource HeaderStyle2}">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemSource="{Binding SomeSource}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

对于每列,这似乎有点过多。但是,它为将来的复杂更改提供了更多的控制权和更好的可伸缩性。在最初的开发阶段就投入了一些琐碎的工作。

我的观点是,自从概念成功之后,就针对用户如何/何时与UI元素进行交互的特定规则和逻辑,特别是在更改数据时,提出了一些进一步的输入/更改和新要求,以改善用户的交互性。

编辑- 您的样式可以与您制作的样式完全相同,即定位DataGridColumnHeader

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?