我尝试根据单元格的值设置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>
答案 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)我想,这里有更多我不知道的解决方案