2017-03-03 51 views
0

我试图做到这一点:XamDataGrid - 如何从C#代码创建一个DataRecordPresenterStyle DataTrigger

<Style TargetType="{x:Type igDP:DataRecordPresenter}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding DataItem.IsOnChart}" Value="true"> 
      <Setter Property="Opacity" Value="1"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding DataItem.IsOnChart}" Value="false"> 
      <Setter Property="Opacity" Value="0.5"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

从C#:

Style _DataRecordPresenterStyle = new Style(typeof(DataRecordPresenter)); 
_DataRecordPresenterStyle.Setters.Add(new Setter(DataRecordPresenter.OpacityProperty, 1)); 

var _DataTrigger = new DataTrigger() { Binding = new Binding("DataItem.IsOnChart"), Value = true }; 
_DataTrigger.Setters.Add(new Setter(DataRecordPresenter.OpacityProperty, 1)); 
_DataRecordPresenterStyle.Triggers.Add(_DataTrigger); 

_DataTrigger = new DataTrigger() { Binding = new Binding("DataItem.IsOnChart"), Value = false }; 
_DataTrigger.Setters.Add(new Setter(DataRecordPresenter.OpacityProperty, 0.5)); 
_DataRecordPresenterStyle.Triggers.Add(_DataTrigger); 

_Grid.FieldLayoutSettings.DataRecordPresenterStyle = _DataRecordPresenterStyle; 

但是,当我将数据绑定到网格我得到的错误:

默认未处理的异常:异常已通过调用的目标引发异常。

的数据确实有该领域,它的类型是布尔和值的所有记录真实。

我在这里做错了什么?

谢谢你的时间。

回答

1

“调用的目标引发异常”并没有多少说明。您应该检查InnerException的消息。我还假设你已经验证了Style本身的作用,如果你在你的XAML标记中使用它。

以编程方式创建Style的推荐方法是使用XamlReader类并分析XAML。试试这个:

string xaml = "<Style xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " + 
    "xmlns:igDP=\"clr-namespace:Infragistics.Windows.DataPresenter;assembly=InfragisticsWPF4.DataPresenter.v12.1\" " + 
    "TargetType=\"{x:Type igDP:DataRecordPresenter}\">" + 
"<Style.Triggers>" + 
     "<DataTrigger Binding=\"{Binding DataItem.IsOnChart}\" Value=\"true\">" + 
      "<Setter Property=\"Opacity\" Value=\"1\"/>" + 
     "</DataTrigger>" + 
     "<DataTrigger Binding=\"{Binding DataItem.IsOnChart}\" Value=\"false\">" + 
      "<Setter Property=\"Opacity\" Value=\"0.5\"/>" + 
     "</DataTrigger>" + 
    "</Style.Triggers>" + 
"</Style>"; 

Style style = System.Windows.Markup.XamlReader.Parse(xaml) as Style; 
style.Seal(); 

您可能需要“InfragisticsWPF4.DataPresenter.v12.1”更改为其中DataRecordPresenter类定义组件的实际名称。

+0

感谢您的答复队友,我会放弃这一切。 – user2109254

+0

工作的魅力,感谢您花时间回答;-) – user2109254