2013-07-24 55 views
2

我遇到了ListView非常奇怪的「特性」。希望有人能幫助我。WPF:ScrollViewer比ListView小4px

在窗口上創建ListView時,它會在邊框和內容之間顯示默認間距。如果您查看Snoop信息,我想這是2的填充(左側和右側)。 ListBoxChrome(ListView的一部分)在我的情況下是363px寬。它內部的ScrollViewer是359px。這兩個控件都沒有設置。即使是一個帶有簡單ListView的新項目也存在這個問題。

一種解決方法是給標題單元填充-2,但由於某種原因,標題將不會填充,直到右側,並留下更寬的空白在右邊。

有人在這裏幫助我?

一些截圖:

http://i.imgur.com/AKbDfwQ.png

http://i.imgur.com/pQtqMJ4.png

回答

0

這是從BorderBorderThicknessPadding組合(各出資爲2px 1px的左和右1px的)。

可以在Windows 8直接設置在默認模板的Border控制設置

<ListView BorderThickness="0"> 

和適度寬鬆的2px的,但是Padding ATLEAST並不會採取,如果直接設置在ListView

任何影響從默認 Style

提取物ListView

<ControlTemplate TargetType="{x:Type ListView}"> 
    <Border x:Name="Bd" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      Padding="1" 
      SnapsToDevicePixels="true"> 

簡單選項是提供一個自定義Style,您可以將Padding的值調整爲0.您還可以選擇使用「行爲」並獲取對邊框控件的引用,並在代碼中重寫填充。

如果你選擇的代碼隱藏的選項覆蓋Padding一個非常粗略的方式來設置填充可能是這樣的:

public MainWindow() 
{ 
    InitializeComponent(); 
    Loaded += (sender, args) => { 
    var border = (Border)lv.Template.FindName("Bd", lv); 
    border.Padding = new Thickness(0); 
    }; 
} 

和XAML中:

<ListView x:Name="lv" 
      BorderThickness="0">