WPF: стилизация ячейки динамически - PullRequest
0 голосов
/ 11 июля 2010

У меня есть требование генерировать «отчет» в WPF, который является просто сеткой.

Однако столбцы и правила оформления (например, «Красный, если значение меньше нуля») для этой сетки неизвестны во время компиляции.

Есть сотни подобных вопросов, и я, должно быть, прочитал более половины из них, но я не могу найти решение этого требования, которое было бы тривиально в WinForms.

Мне удалось стилизовать всю строку, установив ItemContainerStyle объекта ListView, но мне не удалось заставить его сосредоточиться на одной ячейке.

В связи с этим я сейчас пытаюсь использовать подход CellTemplate, но при этом возникает ошибка ({"Child with Name '{x:Type ListViewItem}' not found in VisualTree."}) и, конечно, когда я использую DisplayMemberBinding, CellTemplate даже не вызывается вообще.

Мой преобразователь при получении значения получает всю строку, а не только значение ячейки, поэтому, возможно, это полезная информация.

 GridView viewLayout = new GridView();
 for (int i=0; i<columns.Length; i++)
 {
    ColumnDisplaySettings col = columns[i];
    var g = new GridViewColumn() 
    { 
        Width = col.Width, 
        //DisplayMemberBinding = "[" + i + "]" /* Have to omit this for CellTemplate */
    };

    if (i == 0)
    {
       g.CellTemplate = new DataTemplate();
       var t = new DataTrigger();
       t.Binding = new Binding("[0]");
       t.Value = "0";
       var b = new Binding() { Converter = new MyBkColorConverter() };
       t.Setters.Add(new Setter(Control.BackgroundProperty, b,
          "{x:Type ListViewItem}")); /* Error here */
       g.CellTemplate.Triggers.Add(t);
    }

     viewLayout.Columns.Add(g);
 }
 lv.View = viewLayout;

Я сталкивался с DataTemplateSelectors в своих поисках, поэтому, если есть полезная ссылка на их использование без какого-либо известного XAML, я был бы также признателен за это.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

0 голосов
/ 11 июля 2010

Использование DataGrid WPF Toolkit является одним из решений этой проблемы. (Прокомментируйте, если требуется более подробная информация).

0 голосов
/ 11 июля 2010

Ошибка возникает из-за того, что «{x: Type ListViewItem}» является строкой. Нотация {x: ..} является расширением разметки XAML, но вы не используете XAML. Чтобы обратиться к списку ListViewItem в коде, используйте typeof(ListViewItem).

Кроме того, вы пытаетесь установить свойство Background для типа ListViewItem, что не имеет особого смысла ... позвольте мне перечитать и обновить этот ответ ..

Обновление: вам не нужен третий параметр для конструктора Setter.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...