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

相關問題