0

我们有一些代码成功地使用了 Xceed 的 WPF 数据网格 v.3.8。当我们更新到他们的 v.5.2 数据网格时,我们失去了一项功能。我想要做的就是让网格列标题标题换行成两行。我们在列管理器单元格上设置了一个 ContentTemplate 来执行此操作,它适用于应用程序启动。但是,当您将列标题从屏幕上滚动出来,然后返回到视图中时,ContentTemplate 格式似乎丢失了。

正如我所说,相同的代码适用于早期版本的网格。Xceed 不会帮助我们解决这个问题,因为我们在 Windows 窗体上托管 WPF 网格(这是他们最初的建议)。

Xceed 数据网格位于 .XAML UserControl 上。在 UserControl.Resources 我这样定义 DataTemplate:

<DataTemplate x:Key="columnManagerCellContentTemplate">
    <TextBlock Text="{Binding}" TextWrapping="WrapWithOverflow" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</DataTemplate>

我为 ColumnManagerCell 定义了一个 Style 来设置一个 ColumnManagerCell 加载的事件处理程序:

<Style TargetType="{x:Type xcdg:ColumnManagerCell}">
     <EventSetter Event="Loaded" Handler="ColumnManagerCell_Loaded"/>
</Style>

在用户控件的 .XAML.cs 文件中,我有将 ContentTemplate 分配给 ColumnManagerCells 的 ColumnManagerCell_Loaded 事件处理程序:

internal void ColumnManagerCell_Loaded(object sender, RoutedEventArgs e)
{
    ColumnManagerCell columnManagerCell = sender as ColumnManagerCell;

    if (columnManagerCell != null)
    {
        if (columnManagerCell.ContentTemplate == null)
        {
            columnManagerCell.ContentTemplate = (DataTemplate)this.FindResource("columnManagerCellContentTemplate");
        }
    }
}

这是 Xceed 很久以前记录的所有代码。正如我所说,当我启动应用程序时,它可以正确地将长列标题包装成 2 行。但是,当我将列标题滚动出视图然后返回视图时,格式就消失了。

我还可以在 DataTemplate 中设置 TextBlock 的背景颜色,它在启动时起作用,然后在将标题滚动到视野之外后也会消失。

有人对我如何使这些设置保持不变有任何建议吗?我尝试在 TextBlock 上设置 IsVisibleChanged 事件处理程序并重置该处理程序中的 TextWrapping 属性(我看到它当时是“无”),但这并没有改变情况。

任何建议表示赞赏。

谢谢,

标记

4

2 回答 2

0

您可以覆盖默认模板并将其设置ContentTemplate为反映您的要求。这些包含在 Xceed 安装中(在主题文件夹下)。

如果您找到包含ColumnManagerCell模板的 .xaml,则可以复制它并根据需要进行修改。例如,下面的代码片段用于为列标题提供语言翻译功能:

<StackPanel x:Name="contentPanel" Orientation="Horizontal">
  <!-- Same ContentPresenter as in the base Cell Template. -->
  <!--<xcdg:CellContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />-->
  <!--The following contentpresenter uses the language converter -->
  <ContentPresenter>
    <ContentPresenter.Content>
      <TextBlock Text="{TemplateBinding Content, Converter={StaticResource LanguageTranslationConverter}}"/>
    </ContentPresenter.Content>
  </ContentPresenter>    

  <ContentPresenter x:Name="sortGlyphPresenter"
                    Content="{x:Null}"
                    ContentTemplate="{x:Null}" />

  <ContentPresenter x:Name="sortIndexGlyphPresenter"
                    TextBlock.Foreground="{TemplateBinding Foreground}"
                    Content="{Binding Path=(xcdg:Cell.ParentCell).ParentColumn.SortIndex, RelativeSource={RelativeSource Self}, Converter={StaticResource IntAdditionConverter}, ConverterParameter=1}"
                    ContentTemplate="{x:Null}"
                    Margin="3,0,0,0"
                    Visibility="Collapsed" />                                        
</StackPanel> 

所以你可以用你需要的文本换行和/或背景来修改它​​。

于 2014-05-20T09:42:02.513 回答
0

Net Dev 在以下帖子中提供的答案提供了正确的方法: 样式化 Xceed ColumnManagerCell

由于 UI 虚拟化,不应直接在单元格上设置属性,而应通过样式设置属性。例如:

     <Style TargetType="{x:Type xcdg:ColumnManagerCell}">
        <Setter Property="Template">
           <Setter.Value>
              <ControlTemplate TargetType="ContentControl">
                    <TextBlock Text="{TemplateBinding ContentControl.Content}"
                               TextWrapping="Wrap"
                               HorizontalAlignment="Center"
                               VerticalAlignment="Center" />
              </ControlTemplate>
           </Setter.Value>
        </Setter>
     </Style>
于 2016-09-19T15:17:13.570 回答