XAML для кода программной части

У меня проблемы с преобразованием XAML в программный код.

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

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

-Увы не работает


person VisualBean    schedule 01.10.2013    source источник
comment
Вы не установили setgreen.Binding. А зачем щеточный преобразователь? Вы можете просто написать Brushes.GreenYellow.   -  person Clemens    schedule 01.10.2013
comment
Не знал о кистях - плохо сделаю это вместо этого. Спасибо. - и, кажется, я пропустил эту часть, отредактировал вопрос.   -  person VisualBean    schedule 01.10.2013
comment
И я думаю, вы хотите установить DataGridRow.BackgroundProperty вместо DataGrid.RowBackgroundProperty.   -  person Clemens    schedule 01.10.2013
comment
Работал! - это чудо :)   -  person VisualBean    schedule 01.10.2013


Ответы (2)


Вам нужно изменить значение Property сеттера с

DataGrid.RowBackgroundProperty

to

DataGridRow.BackgroundProperty

или эквивалент

Control.BackgroundProperty.
person Clemens    schedule 01.10.2013

Я бы порекомендовал создать сам 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;
person Sphinxxx    schedule 01.10.2013