2010-05-12 54 views
5

我想有一个围绕ListViewItem(在我的情况下行)的边框。运行时生成的ListView源代码和列。在XAML我有这样的结构:如何我可以在GridView模式下添加边框ListViewItem,ListView

<ListView Name="listViewRaw"> 
    <ListView.View> 
     <GridView> 
     </GridView> 
    </ListView.View> 
</ListView> 

运行期间我绑定列表视图到数据表中,添加必要的列和绑定:

 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列中的值=“可见”,将边框颜色设置为黑色)。 我可以通过ItemTemplate中的DataTemplate放置边框吗?我知道解决方案,您可以使用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> 

回答

11

你必须设置你的边界在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}" /> 
+1

谢谢!我以很多方式在DataTemplate上进行了实验,我只需将其切换到ControlTemplate,另外一件事情,使用GridView,应该使用GridViewRowPresenter :) – Andrew 2010-05-12 09:24:36

10

设置此样式假设你正在使用一个ListView用GridView设置为View,那么ListView默认不显示垂直或水平线。

如果你想添加horitzontal线,那么你可以改变在ListViewItem的边界,e.g:

<ListView ...> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="BorderBrush" Value="LightGray" /> 
      <Setter Property="BorderThickness" Value="0,0,0,1" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn ... /> 
     </GridView> 
    </ListView.View> 
    ... 
+1

“here”?这是哪里? – 2015-10-29 11:14:36

相关问题