我在我的应用程序中使用WPF Toolkit的DataGrid控件。我需要用已调整的TextBlock替换用于单元格的默认TextBlock。 XAML代码如下所示:ContentTemplate绑定问题
<Window.Resources>
<Style x:Key="cellStyle" TargetType="{x:Type tk:DataGridCell}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Background="Yellow" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<tk:DataGrid
ItemsSource="{Binding Path=Products}"
CellStyle="{StaticResource cellStyle}"
AutoGenerateColumns="False">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn
Header="Id"
Binding="{Binding Path=Id}"/>
<tk:DataGridTextColumn
Header="Product"
Binding="{Binding Path=Name}"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
在TextBlock替换之后,所有数据绑定都将丢失,并且所有单元都为空。将属性Text =“{Binding}”添加到新的TextBlock中并没有帮助。在这种情况下,所有单元格都包含DataGridTestApp.Product类型的名称。 TextBlock的正确绑定表达式是什么?
P.S.以防万一:MainWindowViewModel代码
internal sealed class MainWindowViewModel
{
public MainWindowViewModel()
{
_products = new ObservableCollection<Product>()
{
new Product(1, "ProductName1"),
new Product(2, "ProductName2"),
new Product(3, "ProductName3"),
new Product(4, "ProductName4"),
new Product(5, "ProductName5"),
};
}
public ObservableCollection<Product> Products
{
get { return _products; }
}
private ObservableCollection<Product> _products;
}
谢谢。但这是我的问题的简化例子。其实我需要将Margin属性设置为“0,5”的TextBlock。我可以为DataGridCell设置Margin属性,但对我来说不一样。行选择外观会有所不同。 – vkrzv
不会设置contentpresenters填充/边距具有相同的效果吗? –
在这种情况下,选择不包括边距/填充。在相邻选择之间会有很大的差距。如果设置了TextBlock的边距属性,问题就解决了。 – vkrzv