2010-06-20 6 views
7

मैं एक ListView कि कुछ इस तरह चला जाता है है:WPF ListView में आंतरिक लेआउट पैनल के चारों ओर एक पिक्सेल सीमा है। मुझे इससे छुटकारा कैसे मिलेगा?

<ListView 
    x:Name="SeriesListView" 
    SnapsToDevicePixels="True" 
    ItemsSource="{Binding Items}" 
    BorderBrush="Transparent" BorderThickness="0" 
    Padding="0" Margin="0" 
    VerticalContentAlignment="Top" 
    Background="Purple" 
    LostFocus="ListView_LostFocus" 
    > 

    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <local:LDSeriesPanel 
       SnapsToDevicePixels="True" 
       MaxWidth="{Binding ElementName=itControl,Path=ActualWidth}" 
       VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
       MinHeight="{x:Static local:LDSeriesPanel.MIN_HEIGHT}" 
       MinWidth="{x:Static local:LDSeriesPanel.MIN_WIDTH}" 
       Margin="0" 
       Background="Aquamarine"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

जब यह खाली है, चौड़ाई है और मैं परिभाषित किया है कस्टम पैनल की ऊँचाई 15 x 15. मैं पुष्टि कर सकते हैं इन कार्यावधि में वास्तविक आयाम हैं । हालांकि, लिस्ट व्यू में 17 x 17 के आयाम हैं (यानी, पैनल और सूची दृश्य के बीच एक पिक्सेल सीमा)।

कस्टम पैनल से शुरू और पेड़ चलने, मैं निम्नलिखित पूर्वजों मिलती है:

  • ItemsPresenter: 15x15
  • ScrollViewer: 15x15
  • ग्रिड: 15x15
  • ScrollViewer: 15x15
  • सीमा: 17x17
  • सूची दृश्य: 17x17

यदि मैं सूची दृश्य -1 पर पैडिंग बदलता हूं, तो यह सीमा को हटा देता है लेकिन कई अन्य मुद्दों का कारण बनता है।

मैं पूरी सूची दृश्य को पुनः प्राप्त करने से बचने की उम्मीद कर रहा हूं। बाकी सब कुछ ठीक काम कर रहा है। क्या कोई तरीका है कि मैं इस शैली के माध्यम से शायद एक पिक्सेल सीमा को हटा सकता हूं?

उत्तर

2

मैंने ListView के लिए डिफ़ॉल्ट टेम्पलेट पर एक नज़र डाली थी, वास्तव में Border में 1 का स्पष्ट पैडिंग है ... इसलिए मुझे नहीं लगता कि आप इसे टेम्पलेट को फिर से परिभाषित किए बिना कर सकते हैं। वैसे भी, यह बहुत मुश्किल नहीं है: स्टाइलस्नोपर या शोमेई टेम्पलेट (मुझे लगता है कि ब्लेंड इसे भी कर सकता है) जैसे टूल का उपयोग करके डिफ़ॉल्ट टेम्पलेट की प्रतिलिपि बनाएँ, और आपको जो चाहिए उसे बदलें ...

+0

गरर .... ठीक। :( –

+1

मैं इसके बजाय एक सूची बॉक्स का उपयोग कर समाप्त हुआ, लेकिन मैं आपको चेकमार्क दूंगा। प्रतियोगिता इस प्रश्न पर भयंकर थी ...;) –

8

यदि आपके पास मिश्रण है तो यह वास्तव में सरल है आप सूचीदृश्य पर राइट क्लिक कर सकते हैं और टेम्पलेट को संपादित करने और सीमा से पैडिंग को हटाने का चयन कर सकते हैं। आप इसे सीधे xaml में कर सकते हैं। चूंकि मैं चाहता हूं कि मेरी सभी सूचीदृश्यों में यह सीमा न हो, इसलिए मैं इस सामग्री के साथ प्रोजेक्ट की रूट में MyprojectnameResources.xaml नामक संसाधन फ़ाइल बनाउंगा।

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<ControlTemplate x:Key="ListViewNewTemplate" TargetType="{x:Type ListBox}"> 
    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="0" SnapsToDevicePixels="True"> 
     <ScrollViewer Focusable="False" Padding="{TemplateBinding Padding}"> 
      <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
     </ScrollViewer> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
     </Trigger> 
     <Trigger Property="IsGrouping" Value="True"> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="False"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
<!-- Resource dictionary entries should be defined here. --> 

तो आप बस इस टेम्पलेट किसी भी सूचीदृश्य साथ

<ListView Width="1020" Height="764" ItemsSource="{Binding Destinations}" ItemTemplate="{DynamicResource DestinationDataTemplate}" Canvas.Top="0" Canvas.Left="0" BorderThickness="0" Template="{DynamicResource ListViewNewTemplate}" /> 
+0

यह सीमा पर मूर्ख पैडिंग = "1" थी। इसे पैडिंग = "0" में बदलना समाधान था। – DaleyKD

5

एक त्वरित और गंदे समाधान (जोर "गंदे" पर) का उपयोग कर सकते आप चाहते हैं:

<ListView Padding="-1" /> 
+0

इसके लिए धन्यवाद! WinRT में पूरी तरह से काम करता है। –

3

मेरे लिए सबसे आसान समाधान सीमा की मोटाई 0 पर सेट करना था, जैसे:

<ListBox BorderThickness="0" /> 

कोई टेम्पलेट की आवश्यकता ...

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