【问题标题】:defining and using styles in code behind在后面的代码中定义和使用样式
【发布时间】:2017-02-05 13:51:32
【问题描述】:

我从 Telerik:RadGridView 创建了一个派生类。 我需要根据数据对单元格进行样式设置。 这样我就创建了一个样式类并将其用作列的 cellstyleselector。 我需要为每一列设置列单元格样式,我使用了下面的代码,但它不起作用。你知道它为什么不起作用吗?

        public WPFGridConv()
    {
        this.ShowGroupPanel = false;
        this.Loaded += WPFGridConv_Loaded;
        this.AutoGeneratingColumn += WPFGridConv_AutoGeneratingColumn;
        this.ValidationType = GridViewValidationType.None;
        this.ValidatesOnDataErrors= GridViewValidationMode.InViewMode;

    }

    private void WPFGridConv_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
    {
        CreateHeader();
    }


    public void WPFGridConv_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        CreateHeader();

    }

    private void CreateHeader()
    {

        foreach (Telerik.Windows.Controls.GridViewColumn column in this.Columns)
        {

                column.CellStyleSelector= new GridStyleSelector();

        }
    }


public class GridStyleSelector : StyleSelector
{

    public override Style SelectStyle(object item, DependencyObject container)
    {
        if (container is GridViewCell)
        {
            GridViewCell cell = container as GridViewCell;
            string columnId = cell.Column.Tag.ToString();
            WPFGridConv grid = cell.ParentOfType<WPFGridConv>();
            List<InputClass.GridColumnInfoClass> columnsInfoList = grid.workingGridClass.ListOfColumnsInfo;
            InputClass.GridColumnInfoClass columnInfo = columnsInfoList.Find(x => x.id == columnId);
            Type columnType = columnInfo.typeOfColumn;
            if ((cell.Value==null||string.IsNullOrEmpty(cell.Value.ToString())) && columnInfo.IsValueNecessary)
            {
                return NeedeValueStyle;
            }
            else
            {
                if (columnType == null || columnType == typeof(double))
                {
                    double dummyDbl;
                    if (!double.TryParse(cell.Value.ToString(), out dummyDbl))
                        return BadInputStyle;
                    else
                        return CorrectValueStyle;
                }
                else if (columnType == typeof(int))
                {
                    int dummyInt;
                    if (!int.TryParse(cell.Value.ToString(), out dummyInt))
                        return BadInputStyle;
                    else
                        return CorrectValueStyle;
                }
                return CorrectValueStyle;
            }
        }
        return null;
    }

    public Style OutOfRangeStyle
    {
        get
        {
            Style returnStyle=new Style(typeof(GridViewCell));
            returnStyle.Setters.Add(new Setter(GridViewCell.BorderBrushProperty, new SolidColorBrush(Colors.Purple)));
            return returnStyle;
        }
        set
        {

        }
    }

    public Style BadInputStyle {
        get
        {
            Style returnStyle = new Style(typeof(GridViewCell));
            returnStyle.Setters.Add(new Setter(GridViewCell.BorderBrushProperty, new SolidColorBrush(Colors.Red)));
            return returnStyle;
        }
        set
        {

        }
    }

    public Style NeedeValueStyle
    {
        get
        {
            Style returnStyle = new Style(typeof(GridViewCell));
            returnStyle.Setters.Add(new Setter(GridViewCell.BorderBrushProperty, new SolidColorBrush(Colors.IndianRed)));
            return returnStyle;
        }
        set
        {

        }
    }
    public Style CorrectValueStyle
    {
        get
        {
            Style returnStyle = new Style(typeof(GridViewCell));
            returnStyle.Setters.Add(new Setter(GridViewCell.BorderBrushProperty, new SolidColorBrush(Colors.Black)));
            return returnStyle;
        }
        set
        {

        }
    }
}

【问题讨论】:

    标签: c# wpf telerik styles


    【解决方案1】:

    如果您使用隐式主题,那么您的样式将不起作用,因为它们不是基于现有样式。

    您应该删除您在 getter 中创建的样式,而是将它们作为 xaml 资源添加到您的应用/页面/控件中。

    例如,改变

        public Style CorrectValueStyle
    {
        get
        {
            Style returnStyle = new Style(typeof(GridViewCell));
            returnStyle.Setters.Add(new Setter(GridViewCell.BorderBrushProperty, new SolidColorBrush(Colors.Black)));
            return returnStyle;
        }
        set
        {
    
        }
    }
    

        public Style CorrectValueStyle { get; set; }
    

    然后在您的 xaml 中定义样式选择器,如下所示:

        <Grid.Resources>
        <my:GridStyleSelector x:Key="styleSelector">
            <my:GridStyleSelector.CorrectValueStyle>
                <Style TargetType="telerik:GridViewCell">
                    <Setter Property="BorderBrush" Value="Black"/>
                </Style>
            </my:GridStyleSelector.CorrectValueStyle>
    
            ...etc...
    
        </my:GridStyleSelector>
    </Grid.Resources>
    

    如果您使用隐式主题,则需要为每种样式设置 BasedOn 属性:

    <Style TargetType="telerik:GridViewCell" BasedOn="{StaticResource GridViewCellStyle">
    

    然后您可以在这样的列上使用样式选择器:

    <telerik:RadGridView>
    <telerik:RadGridView.Columns>
        <telerik:GridViewDataColumn DataMemberBinding="{Binding SomeProperty}"
                                    CellStyleSelector="{StaticResource styleSelector}" />
    </telerik:RadGridView.Columns>
    </telerik:RadGridView>
    

    【讨论】:

    • 您好,感谢您的回复。不,我不使用隐式主题,但我也无权访问该类的 XAML,因为我创建了一个派生自 RadGridView 的类,以向其添加一些规范以将这个新类用作我的网格视图,因此我没有任何 XAML 访问权限这个类的,我也必须在代码中定义样式。你有什么建议?
    • 您能否发布定义您的 GridView 的 XAML 代码?
    • 因为我从控制类派生了一个类,所以我没有任何 xaml 文件!
    【解决方案2】:

    大家好,感谢您的回复。 Telerik 支持人员如下回答我,正如我所检查的那样,这是真的。

    你好, 您定义的样式已正确定义并且确实已应用,但是,由于 RadGridView 的网格线,单元格的 BorderThickness 和 BorderBrush 属性不受尊重。您可以通过设置 Background 或 Foreground 属性来测试这一点,以查看是否应用了样式。 因此,您将需要编辑元素的控制模板以实现所需的结果。这是讨论类似情况的论坛主题。 我希望你觉得这有帮助。 问候, 迪利安·特雷科夫 Telerik 按进度

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2012-01-21
      • 2010-12-30
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多