2013-10-01 1 views
0

У меня возникли проблемы с преобразованием XAML в codebehind.XAML to codebehind

У меня есть это:

<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding state}" Value="True"> 
      <Setter Property="Background" Value="GreenYellow"/>             
     </DataTrigger> 
     <DataTrigger Binding="{Binding state}" Value="False"> 
      <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

DataGrid заполняется через (псевдо) ... new Dataview(ds.Tables[mytable]);

теперь я пытаюсь создать стиль и триггер в коде позади , но у меня проблема с привязкой.

У меня есть

BrushConverter brushConverter = new BrushConverter(); 
      Style setcolor = new Style(); 
      setcolor.TargetType = typeof(DataGridRow); 
      DataTrigger setgreen = new DataTrigger(); 
      setgreen.Binding = new Binding("state"); 
      setgreen.Value = true; 
      setgreen.Setters.Add(new Setter(DataGrid.RowBackgroundProperty, brushConverter.ConvertFromString(Colors.GreenYellow.ToString()))); 
      setcolor.Triggers.Add(setgreen); 

-Alas он не работает

+0

Вы не установили 'setgreen.Binding'. И почему кисти-конвертер? Вы можете просто написать «Brushes.GreenYellow». – Clemens

+0

Не знал о кистях - плохо делай это. Благодарю. - и, похоже, я оставил эту часть, отредактировал вопрос. – VisualBean

+1

И я думаю, вы хотите установить 'DataGridRow.BackgroundProperty' вместо' DataGrid.RowBackgroundProperty'. – Clemens

ответ

1

Вы должны изменить значение сеттер в Property от

DataGrid.RowBackgroundProperty 

в

DataGridRow.BackgroundProperty 

или equiva одолжил

Control.BackgroundProperty. 
0

Я бы рекомендовал строить Style сам в XAML, а затем принести его в свой код, за каждый раз, когда вам это нужно. Например, если все происходит в UserControl:

<UserControl x:Class=... 
      ... 
> 
    <UserControl.Resources> 
     <Style x:Key="MyRowStyle" TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding state}" Value="True"> 
        <Setter Property="Background" Value="GreenYellow"/>             
       </DataTrigger> 
       <DataTrigger Binding="{Binding state}" Value="False"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </UserControl.Resources> 

    <!-- Your content here.. --> 

..и в коде-за:

var newGrid = new Dataview(ds.Tables[mytable]); 
newGrid.RowStyle = this.Resources["MyRowStyle"] as Style;