- 左邊的保證金是由DataGridRowHeaderStyle引起
我將它設置爲綠色,以使其可見
01 DataGridRowHeaderStyle1的
<Style x:Key="DataGridRowHeaderStyle1" TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRowHeader}">
<!-- I set Width to 50 to make border visible. Set Width="0" to make it disappear -->
<Border BorderThickness="1" BorderBrush="Green" Width="50" >
這裏用法:
<DataGrid x:Name="datagridPersons"
RowHeaderStyle="{DynamicResource DataGridRowHeaderStyle1}" >
(注:使DataGridRowHeaderStyle要創建:右鍵單擊數據網格/編輯其他模板/編輯DataGridRowHeaderStyle /創建副本)
爲了使邊距消失,
將寬度設置爲0,如在上面的XAML註釋中所寫的,並且th e邊際消失
- 當數據分組時,會再次出現更多邊距。
展望與Visual Studio的可視化樹,您會看到:
這裏是有罪的!
(爲了看到這一點,請在圖形回調中設置斷點,請注意this
或對數據網格的引用。 然後點擊放大鏡,在調試器)
我發現的唯一的解決辦法是在視覺樹檢索有罪ItemsPresenter
並設置其利潤率爲0
最後一個問題是GroupItems
是使用項目演示者動態創建的。
所以當添加GroupItems
時需要刪除邊距。 所以我訂閱了CollectionViewSource
分組事件
viewSource.View.GroupDescriptions.CollectionChanged += View_CollectionChanged;
async void View_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// later ...
await Task.Delay(100);
RemoveMargins();
}
private void RemoveMargins()
{
// For FindAllVisualDescendants() function, see my answer to that question :
// http://stackoverflow.com/questions/32736265/datagrid-templatecolumn-update-source-trigger-explicit-only-updates-first-row/32741477#32741477
var allItemsPresenter = datagridPersons.FindAllVisualDescendants()
.OfType<ItemsPresenter>()
.Where(elt => elt.Name == "ItemsPresenter")
.Where(elt => elt.Margin == new Thickness(5, 0, 0, 0));
foreach (var itemsPresenter in allItemsPresenter)
{
itemsPresenter.Margin = new Thickness(0, 0, 0, 0);
}
}
,我不得不異步做到了。
這樣一來,它的工作原理:
這裏是全碼:
http://1drv.ms/1VXx9qb
最佳編碼
的滾動條將出現在視圖的完整長度它用於。標題需要放在該容器的外面。至於標題,您需要自定義邊距和填充以強制其與左邊距和右邊距對齊。 –
也許你可以用'ScaleTransform'替換你的'TranslateTransform',這取決於你的設計 – WiiMaxx
也是一個測試代碼樣本:) – WiiMaxx