【问题标题】:How to set ContentTemplate on Xceed WPF datagrid cell?如何在 Xceed WPF 数据网格单元格上设置 ContentTemplate?
【发布时间】:2014-04-09 20:44:30
【问题描述】:

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

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

Xceed 数据网格位于 .XAML 用户控件上。在 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 文件中,我有 ColumnManagerCell_Loaded 事件处理程序,它将 ContentTemplate 分配给 ColumnManagerCells:

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 属性(我看到它当时是“无”),但这并没有改变情况。

任何建议表示赞赏。

谢谢,

标记

【问题讨论】:

    标签: wpf datagrid xceed


    【解决方案1】:

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

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

    <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> 
    

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

    【讨论】:

      【解决方案2】:

      Net Dev 在以下帖子中提供的答案提供了正确的方法: Styling the 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 2013-06-10
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        相关资源
        最近更新 更多