CellTemplateSelector不会自动选择模板 [英] CellTemplateSelector won't choose template automatically

查看:90
本文介绍了CellTemplateSelector不会自动选择模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个用于DataGridTemplateColumn的模板

I have two templates for DataGridTemplateColumn

     <DataTemplate x:Key="firstTemplate">
        <UniformGrid Grid.Column="1" Columns="2">
            <Label Background="{Binding Path=Color,

                                   Converter={StaticResource gradientBrush}}"
                       Content="{Binding Path=Value}"
                       Style="{StaticResource WhiteCellLabelStyle}"
                       Visibility="Visible" />                  
        </UniformGrid>
    </DataTemplate>

    <DataTemplate x:Key="secondTemplate">
        <UniformGrid Grid.Column="1" Columns="{Binding Converter={StaticResource getColumnsAmount}}">
            <Label Background="{Binding Path=ColorData_1.Color,
                                        Converter={StaticResource gradientBrush}}"
                   Content="{Binding Path=ColorData_1,
                                     Converter={StaticResource ValueRangeConvert}}"
                   Style="{StaticResource WhiteCellLabelStyle}"
                   Visibility="{Binding Path=ColorData_1.IsSelected,
                                        Converter={StaticResource boolConvert}}" />
            <Label Background="{Binding Path=ColorData_2.Color,
                                        Converter={StaticResource gradientBrush}}"
                   Content="{Binding Path=ColorData_2,
                                     Converter={StaticResource ValueRangeConvert}}"
                   Style="{StaticResource WhiteCellLabelStyle}"
                   Visibility="{Binding Path=ColorData_2.IsSelected,
                                        Converter={StaticResource boolConvert}}" />
            <Label Background="{Binding Path=ColorData_3.Color,
                                        Converter={StaticResource gradientBrush}}"
                   Content="{Binding Path=ColorData_3,
                                     Converter={StaticResource ValueRangeConvert}}"
                   Style="{StaticResource WhiteCellLabelStyle}"
                   Visibility="{Binding Path=ColorData_3.IsSelected,
                                        Converter={StaticResource boolConvert}}" />             
        </UniformGrid>          
    </DataTemplate>


    <DataGrid Name="dgLegend"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch"
              AutoGenerateColumns="False"
              Background="{x:Null}"
              HeadersVisibility="None"
              IsHitTestVisible="True"
              IsReadOnly="True"
              ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="Auto"
                                    Header="exp"
                                    IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Border Background="{Binding Path=Color>
                            <Label Content="{Binding Path=Color}" />
                        </Border>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Width="*" Header="Range">
                <DataGridTemplateColumn.CellTemplateSelector>
                    <local:LegendDisplayModeTemplateSelector 
                                                             firstTemplate="{StaticResource firstTemplate}"
                                                             secondTemplate="{StaticResource secondTemplate}" />
                </DataGridTemplateColumn.CellTemplateSelector>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>






我的TemplateSelector


My TemplateSelector

public class LegendDisplayModeTemplateSelector : DataTemplateSelector
    {
        public DataTemplate firstTemplate
        {
            get;
            set;
        }
        public DataTemplate secondTemplate
        {
            get;
            set;
        }

        public DisplayMode displayMode
        {
            get;
            set;
        }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            TSOptions opts = (TSOptions)item;
                   //some other code                       
        } 
   }

问题是SelectTemplate中的项目(对象项目,DependencyObject容器)始终为空

The problem is the item in SelectTemplate(object item, DependencyObject container) always get null

推荐答案

我找到了答案。

http://social.msdn.microsoft.com/Forums/en/wpf/thread/b47ac38a-077f-41da-99b1-8b88add693d8?prof=required

他是这样使用的:

     class UserCellEdit : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            ContentPresenter presenter = container as ContentPresenter;
            DataGridCell cell = presenter.Parent as DataGridCell;
            Guideline_node node  = (cell.DataContext as Guideline_node);

//,...... etc.  the rest of the code
         }
    }

这篇关于CellTemplateSelector不会自动选择模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆