2010-05-12 1 views
5

मैं ListViewItem (मेरे मामले में पंक्ति) के चारों ओर एक सीमा बनाना चाहता हूं। रनटाइम के दौरान उत्पन्न स्रोत और कॉलम सूची देखें। XAML में मैं इस संरचना है:मैं ListViewItem पर सीमा कैसे जोड़ सकता हूं, GridView मोड में ListView

<ListView Name="listViewRaw"> 
    <ListView.View> 
     <GridView> 
     </GridView> 
    </ListView.View> 
</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()); 

तो मैं प्रत्येक पंक्ति के चारों ओर बॉर्डर जोड़ना चाहते हैं, और सेट सीमा व्यवहार (रंग इत्यादि) डेटाट्रिगर्स के साथ (उदाहरण के लिए यदि पहले कॉलम में मूल्य = "दृश्यमान", काला रंग को काला रंग सेट करें)। क्या मैं आइटम टेम्पलेट में डेटा टेम्पलेट के माध्यम से सीमा डाल सकता हूं? मुझे समाधान पता है, जहां आप सेल टेम्पलेट्स के साथ हेरफेर करते हैं, लेकिन मुझे वास्तव में यह पसंद नहीं है। मुझे ऐसा कुछ चाहिए यदि यह भी संभव हो।

<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

धन्यवाद! मैंने डेटाटेम्प्लेट पर कई तरीकों से प्रयोग किया था, मुझे बस इसे नियंत्रण नियंत्रण में स्विच करना था, ओह एक और बात, ग्रिड व्यू के साथ, इसके बजाय ग्रिडव्यूआरओपेंटर का उपयोग करना चाहिए :) – Andrew

10

में इस शैली सेट कर सकते हैं यदि आप एक साथ एक ListView का उपयोग कर रहे मानते हुए होगा ग्रिड व्यू दृश्य के रूप में सेट किया गया है, तो ListView डिफ़ॉल्ट रूप से लंबवत या क्षैतिज रेखाएं नहीं दिखाता है।

आप horitzontal लाइनों को जोड़ने के लिए तो आप ListViewItem पर सीमा को बदल सकते हैं चाहते हैं, उदाहरण के लिए:

<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

"यहां"? कहाँ हे यहाँ? –