Sin*_*atr 5 c# wpf xaml datagrid
尝试使用分组DataGrid
并且无缘无故地出现这些绑定错误(它们不属于我的代码,我也没有找到处理它们的方法):
System.Windows.Data 错误:4:无法找到引用“RelativeSource FindAncestor、AncestorType='System.Windows.Controls.DataGrid'、AncestorLevel='1”的绑定源。BindingExpression:Path=AreRowDetailsFrozen; 数据项=空;目标元素是“DataGridDetailsPresenter”(名称=“”);目标属性是“SelectiveScrollingOrientation”(类型“SelectiveScrollingOrientation”)
和
System.Windows.Data 错误:4:无法找到引用“RelativeSource FindAncestor、AncestorType='System.Windows.Controls.DataGrid'、AncestorLevel='1”的绑定源。BindingExpression:Path=HeadersVisibility; 数据项=空;目标元素是“DataGridRowHeader”(名称=“”);目标属性是“可见性”(类型“可见性”)
它们出现在 中的每一行DataGrid
。这让我很烦恼!
为了重现这个问题,我做了一个小项目
public class MyItem
{
public string A { get; set; }
}
public class ViewModel
{
public List<MyItem> List { get; set; }
public ViewModel()
{
List = new List<MyItem>(new[] { new MyItem() });
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
Run Code Online (Sandbox Code Playgroud)
xaml
<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A}" Header="A"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<!-- anything or nothing here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
一些观察结果:
DataGrid.GroupStyle
则没有错误;AutoGenerateColumns = true
错误;DataGrid.ItemsSource
直接设置)就没有错误。只有与这 3 个条件相反的组合才会启动Output
包含上述消息的垃圾邮件窗口。
我应该怎么办?我无法忽视错误,也找不到修复它们的方法。
谷歌搜索并没有多大帮助,例如,这种情况被称为错误,我尝试应用它的解决方法,但没有一个对我有用。
PS:第一次尝试使用时发现此类错误DataGrid
是非常令人沮丧的。
尝试处理第二个错误。
<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Template" Value="{x:Null}"/>
</Style>
</DataGrid.RowHeaderStyle>
Run Code Online (Sandbox Code Playgroud)
但错误仍然存在
System.Windows.Data 错误:4:无法找到引用“RelativeSource FindAncestor、AncestorType='System.Windows.Controls.DataGrid'、AncestorLevel='1”的绑定源。BindingExpression:Path=HeadersVisibility; 数据项=空;目标元素是“DataGridRowHeader”(名称=“”);目标属性是“可见性”(类型“可见性”)
正在使用控制模板,更改后DataGridRow
错误就消失了!
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridRow">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="DGR_Border" SnapsToDevicePixels="True">
<SelectiveScrollingGrid>
<DataGridCellsPresenter ItemsPanel="{TemplateBinding ItemsControl.ItemsPanel}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/>
</SelectiveScrollingGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
Run Code Online (Sandbox Code Playgroud)
我从默认模板中删除了DataGridDetailsPresenter
和DataGridRowHeader
,因为我不会使用它们。
我又遇到一个错误
System.Windows.Data 错误:4:无法找到引用“RelativeSource FindAncestor、AncestorType='System.Windows.Controls.DataGrid'、AncestorLevel='1”的绑定源。BindingExpression:Path=NewItemMargin; 数据项=空;目标元素是“DataGridRow”(名称=“”);目标属性是“边距”(类型“厚度”)
我通过添加Margin
setter来解决这个问题DataGrid.RowStyle
<Setter Property="Margin" Value="0"/>
Run Code Online (Sandbox Code Playgroud)
似乎所有此类错误都可以通过重构默认模板来修复。
归档时间: |
|
查看次数: |
2055 次 |
最近记录: |