带有换行和工具提示的DataGridTextColumn样式

时间:2015-04-01 09:07:54

标签: c# wpf wpfdatagrid wpf-style

在我的C#/ WPF应用程序中,我有DatagridDataGridTextColumn列,同时使用文本换行和工具提示。

我可以像这样编写每一列(这样可以正常工作):

<DataGridTextColumn Header="Name" Binding="{Binding Name}">
    <DataGridTextColumn.ElementStyle>
        <Style>
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="ToolTip" Value="Some tooltip text" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

但我想定义一个可以设置包装和工具提示文本的通用样式,因为知道每个列的工具提示文本会有所不同。目的是避免代码冗余并使其更清晰。

到目前为止,这是我的风格:

<Window.Resources>
    <Style x:Key="WrapStyle" TargetType="{x:Type DataGridCell}">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextWrapping="Wrap">
                            <TextBox.ToolTip>
                                <ToolTip>
                                    <ToolTip.Content>
                                        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tooltip}" />
                                    </ToolTip.Content>
                                </ToolTip>
                            </TextBox.ToolTip>
                        </TextBox>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
</Window.Resources>

我的专栏:

<DataGridTextColumn Header="Name" Binding="{Binding Name}" CellStyle="{StaticResource WrapStyle}" />

问题在于我无法指定传递给样式的工具提示。有没有办法做到这一点,而不是为每列写5行DataGridTextColumn.CellStyle? 谢谢

1 个答案:

答案 0 :(得分:1)

将样式修改为 -

<Window.Resources>
    <Style x:Key="WrapStyle" TargetType="DataGridCell">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextWrapping="Wrap">
                            <TextBox.ToolTip>
                                <ToolTip>
                                    <ToolTip.Content>
                                        <TextBlock Text="{Binding Path=Tooltip}"></TextBlock>
                                    </ToolTip.Content>
                                </ToolTip>
                            </TextBox.ToolTip>
                        </TextBox>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
</Window.Resources>