wpf - CellTemplateSelector 不会自动选择模板

标签 wpf templates datatemplate datatemplateselector

我有两个 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>

我的模板选择器

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(object item, DependencyObject container) 中的项目总是为 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
         }
    }

关于wpf - CellTemplateSelector 不会自动选择模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506839/

相关文章:

.net - WPF应用程序焦点不稳定

wpf - 如何继承 DataGrid 列

c# - 在 WPF 中更改光标有时有效,有时无效

wpf - 选中数据网格标题中的所有复选框在 wpf mvvm 中无法正常工作

c++ - 使用模板时无效使用非静态数据成员

c++ - 模板化的 C++ 参数无法正确找到类型

WPF、用户控件或数据模板

c# - WPF 控件模板和数据模板

java - 是否可以使用复杂的 XML 模板文件动态生成 Android UI?

wpf - 修改 TabControl 的标题