2009-09-04 19 views
9

में कॉलम पृष्ठभूमि सेट करना मैं एक WPF GridView में कॉलम की पृष्ठभूमि सेट करना चाहता हूं। कई Google परिणामों ने कॉलम की उपस्थिति को बदलने के लिए GridViewColumn.CellTemplate को सेट करने की ओर इशारा किया है। हालांकि, पृष्ठभूमि रंग सेट करते समय मुझे एक समस्या से मुलाकात की जाती है;WPF ListView/Gridview

Ugly Grid View

यहाँ XAML के साथ मैं काम कर रहा हूँ है::

<Window x:Class="ScratchPadWpf.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Width="300" Height="300"> 
    <Grid> 
    <ListView ItemsSource="{Binding}"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Red"> 
        <TextBlock Text="{Binding FirstName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
       <Grid Background="Yellow"> 
        <TextBlock Text="{Binding LastName}"/> 
       </Grid> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
     </ListView.View> 
    </ListView> 
    </Grid> 
</Window> 

और अच्छा उपाय xaml.cs:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
    InitializeComponent(); 
    DataContext = new[] 
    { 
     new {FirstName = "Jim", LastName = "Bob"}, 
     new {FirstName = "Frank", LastName = "Smith"}, 
     new {FirstName = "Tooth", LastName = "Paste"}, 
    }; 
    } 
} 

सेटिंग यह सेल को भरने के लिए खींच नहीं कर रहा है डेटाटेम्प्लेट की ग्रिड की चौड़ाई और ऊंचाई नकारात्मक मार्जिन वाले सेल से बड़ी हो सकती है, नजदीक परिणाम उत्पन्न कर सकती है, लेकिन यदि आप कॉलम का आकार बदलते हैं, तो समस्या स्वयं को फिर से दिखाती है।

<Grid Background="Yellow" Height="22" Width="50" Margin="-6"> 

Still Ugly

वहाँ एक रास्ता रंग के साथ सेल को भरने के लिए है?

उत्तर

10

सेट ItemContainerStyle की HorizontalContentAlignment:

<ListView ItemsSource="{Binding}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

परिणाम:

alt text

+0

जो चौड़ाई निर्धारित करने में मदद करता है। हालांकि, दो स्तंभों के बीच अभी भी एक अंतर है। इसे बंद करने का कोई तरीका? – statenjason

+5

अलास, GridViewRowPresenter मार्जिन को 6,0,6,0 तक हार्ड-कोड करता है। मुझे डर है कि यह इस के आसपास काम करने के लिए एक उचित मात्रा में काम होगा। –

+0

एक हैकी वर्कअराउंड युक्त ग्रिड के मार्जिन को -6,0, -6,0 पर सेट करना है। –

3

एक पुराने धागा ऊपर खुदाई, लेकिन मैं इस

<Grid Background="{Binding backGround}" Margin="-6,0,-6,0"> 
    <TextBlock Margin="6,0,6,0" Text="{Binding myText}" TextAlignment="Right" /> 
</Grid> 

के लिए एक कुशल समाधान मिल जाने मार्जिन को स्थानांतरित करता है ताकि पृष्ठभूमि रंग भर जाए पूरा सेल, लेकिन फिर उन्हें वापस ले जाता है ताकि टेक्स्ट अभी भी सही जगह पर हो। अब तक ठीक से तय होने तक काम करता है।

+2

इसे खोदने पर पहले से ही धागा खोदना; मुझे यह जानकर उत्सुकता है कि क्या यह घटना अब 'तय' है? मैं चार साल तक कोडिंग से दूर होने के बाद डब्ल्यूपीएफ सीखने की कोशिश कर रहा हूं, और अलग-अलग रंगों की निर्बाध कॉलम पृष्ठभूमि बनाने के लिए कोई बेहतर समाधान नहीं दिख रहा है। कोई भी जो मुझे आधुनिक/बेहतर तरीके से इंगित कर सकता है, उसका स्वागत है: डी – Grim

संबंधित मुद्दे