Я хочу иметь границу вокруг ListViewItem (строка в моем случае). Источник ListView и столбцы сгенерированы во время Времени выполнения. В XAML у меня есть эта структура:
<ListView Name="listViewRaw">
<ListView.View>
<GridView>
</GridView>
</ListView.View>
</ListView>
Во время Времени выполнения я связываю listview с DataTable, добавляя необходимые столбцы и привязку:
var view = (listView.View as GridView);
view.Columns.Clear();
for (int i = 0; i < table.Columns.Count; i++)
{
GridViewColumn col = new GridViewColumn();
col.Header = table.Columns[i].ColumnName;
col.DisplayMemberBinding = new Binding(string.Format("[{0}]", i.ToString()));
view.Columns.Add(col);
}
listView.CoerceValue(ListView.ItemsSourceProperty);
listView.DataContext = table;
listView.SetBinding(ListView.ItemsSourceProperty, new Binding());
Таким образом, я хочу добавить границу вокруг каждой строки и установить поведение границы (цвет и т.д.) с DataTriggers (например, если значение в 1-м столбце = "Видимый", цвет рамки набора к черному цвету). Я могу провести границу через DataTemplate в ItemTemplate? Я знаю решение, где Вы управляете с CellTemplates, но мне действительно не нравится он. Я хочу что-то вроде этого если это даже возможное.
<DataTemplate>
<Border Name="Border" BorderBrush="Transparent" BorderThickness="2">
<ListViewItemRow><!-- Put my row here, but i ll know about table structure only during runtime --></ListViewItemRow>
</Border>
</DataTemplate>
Вам придется установить границу в ControlTemplate
<Style x:Key="BorderedItem" TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border Name="Border" BorderBrush="Transparent" BorderThickness="2">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Теперь вы можете установить этот стиль в ListView
<ListView ItemContainerStyle="{StaticResource BorderedItem}" />