样式化TreeList单元格异常

时间:2015-08-31 07:01:30

标签: c# wpf devexpress

我尝试根据单元格的值设置ListTree中的单元格样式。每次运行我的代码时,我都会遇到以下异常,我无法弄清楚出了什么问题。

  

未处理的类型异常   ' System.Windows.Markup.XamlParseException'发生在   PresentationFramework.dll

C#值检查

public class StatusStyle : MarkupExtension, IValueConverter
    {

        public Style Red { get; set; }
        public Style Green { get; set; }
        public Style Orange { get; set; }
        public Style Gray { get; set; }
        public Style Blue { get; set; }


        #region IValueConverter Members

        public object Convert(object value, System.Type targetType,
                    object parameter, System.Globalization.CultureInfo culture)
        {
            if (value.ToString().Equals("Trade"))
            {
                return Red;
            }

            return null;
        }

        public object ConvertBack(object value, System.Type targetType,
                    object parameter, System.Globalization.CultureInfo culture)
        {
            throw new System.NotImplementedException();
        }

        #endregion

        public override object ProvideValue(System.IServiceProvider serviceProvider)
        {
            return this;
        }
    }

WPF代码

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:LogHunter"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        xmlns:dxt="http://schemas.devexpress.com/winfx/2008/xaml/grid" x:Class="LogHunter.Window1"
        mc:Ignorable="d"
        Title="Window1" Height="750" Width="750">
    <Grid>


        <Grid.Resources>
            <local:StatusStyle x:Key="statusStyle">
                <local:StatusStyle.Red>
                    <Style TargetType="dxt:CellContentPresenter">
                        <Setter Property="Background" Value="Green"/>
                    </Style>
                </local:StatusStyle.Red>
            </local:StatusStyle>
        </Grid.Resources>

        <dxt:TreeListControl Name="treeList">
            <dxt:TreeListControl.Columns>
                <dxt:TreeListColumn FieldName="ClientID" Header="Heirarchy"/>
                <dxt:TreeListColumn FieldName="InstrumentID" />
                <dxt:TreeListColumn FieldName="OrderID" />
                <dxt:TreeListColumn FieldName="Status" 
                                    CellStyle="{StaticResource statusStyle}"/>
                <dxt:TreeListColumn FieldName="OpenPosition" />
                <dxt:TreeListColumn FieldName="ExecPosition" />
                <dxt:TreeListColumn FieldName="CumOpenPosition" />
                <dxt:TreeListColumn FieldName="CumExecPosition" />
                <dxt:TreeListColumn FieldName="TransactionTime" />
                <dxt:TreeListColumn FieldName="LogTime" />
            </dxt:TreeListControl.Columns>
            <dxt:TreeListControl.View>
                <dxt:TreeListView Name="treeListView1" AutoWidth="True"
                                  KeyFieldName="ID" ParentFieldName="ParentID" />
            </dxt:TreeListControl.View>
        </dxt:TreeListControl>

    </Grid>
</Window>

1 个答案:

答案 0 :(得分:1)

这里有很多可能性:

1)使用FormatConditions

            <dxg:TreeListView Name="treeListView1" AutoWidth="True" KeyFieldName="ID" ParentFieldName="ParentID">
                <dxg:TreeListView.FormatConditions>
                    <dxg:FormatCondition FieldName="Status" Expression="[Status] = 'Trade'" PredefinedFormatName="LightRedFill"/>
                </dxg:TreeListView.FormatConditions>
            </dxg:TreeListView>

您可以在此处找到预定义的格式: https://documentation.devexpress.com/#WPF/DevExpressXpfGridTableView_PredefinedFormatstopic

2)来自DevExpress的ObjectToObject转换器

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:setCellStyle="clr-namespace:SetCellStyle"
    xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
    xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
    xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
    x:Class="SetCellStyle.MainWindow"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.Resources>
        <dxmvvm:ObjectToObjectConverter x:Key="StringToColorConverter">
            <dxmvvm:MapItem Source="Trade" Target="#800080"/>
            <dxmvvm:MapItem Source="NoTrade" Target="Red"/>
        </dxmvvm:ObjectToObjectConverter>
        <Style x:Key="ConditionalCellStyle" BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=LightweightCellStyle}}" TargetType="{x:Type dxg:LightweightCellEditor}">
            <Setter Property="Background" Value="{Binding Path=Value, Converter={StaticResource StringToColorConverter}}"/>
        </Style>
    </Grid.Resources>

    <dxg:TreeListControl x:Name="TreeListControl">
        <dxg:TreeListControl.Columns>
            <dxg:TreeListColumn FieldName="ClientID" Header="Heirarchy" ReadOnly="True"/>
            <dxg:TreeListColumn FieldName="Status" CellStyle="{StaticResource ConditionalCellStyle}" ReadOnly="True"/>
        </dxg:TreeListControl.Columns>
        <dxg:TreeListControl.View>
            <dxg:TreeListView Name="treeListView1" AutoWidth="True" KeyFieldName="ID" ParentFieldName="ParentID">
            </dxg:TreeListView>
        </dxg:TreeListControl.View>
    </dxg:TreeListControl>

</Grid>

3)我想,这里有更多我不知道的解决方案