2017-03-03 5 views
0

Je suis en train de le faire:XamDataGrid - Comment créer un DataTrigger DataRecordPresenterStyle de code C#

<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> 

De 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; 

Mais quand je lie les données au réseau que je reçois la erreur:

Exception non gérée par défaut: Une exception a été émise par la cible d'un appel.

Les données ont le champ, leur type est un booléen et la valeur est vraie sur tous les enregistrements.

Qu'est-ce que je fais mal ici?

Merci pour votre temps.

Répondre

1

"Exception a été levée par la cible d'une invocation" ne dit pas grand-chose. Vous devriez vérifier le message du InnerException. Je suppose également que vous avez vérifié que le Style lui-même fonctionne si vous l'utilisez dans votre balisage XAML.

La méthode recommandée pour créer un Style par programme est d'utiliser la classe XamlReader et d'analyser XAML. Essayez ceci:

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(); 

Vous pourriez avoir à changer « InfragisticsWPF4.DataPresenter.v12.1 » au nom réel de l'ensemble dans lequel la classe DataRecordPresenter est définie.

+0

merci pour la réponse mate, je vais essayer. – user2109254

+0

a travaillé comme un charme, merci d'avoir pris le temps de répondre ;-) – user2109254