我正在使用具有多个固定列的DataGrid。
此外,我还动态添加了包含CheckBox
标题自定义样式的列。
这是风格:
<Style TargetType="DataGridColumnHeader" x:Key="CustomerColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" HorizontalAlignment="Center" Margin="3,0,3,0" Text="{Binding}"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
<CheckBox Margin="0,2,5,0"/>
<TextBlock HorizontalAlignment="Stretch" TextAlignment="Center" Text="Interpolate"/>
</StackPanel>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="0,1,1,1"/>
</Style>
这是我添加列并设置其样式的方式:
grid.Columns.Add(new CustomDataGridTextColumn()
{
HeaderStyle = (Style)grid.Resources["CustomerColumnHeader"],
Header = "Test",
IsReadOnly = false,
Binding = new Binding(binding),
Interpolate = true
});
编辑:这是我的Column类的样子:
class CustomDataGridTextColumn : DataGridTextColumn
{
public bool Interpolate { get; set; }
}
它只不过是添加了属性的DataGridTextColumn
。
如何将样式IsChecked
的{{1}}属性绑定到CheckBox
的{{1}}属性?
答案 0 :(得分:1)
您可以尝试使用RelativeSource Binding
从Checkbox.IsChecked
属性绑定到自定义列属性。试试这个:
<CheckBox Margin="0,2,5,0" IsChecked="{Binding Interpolate, RelativeSource={
RelativeSource AncestorType={x:Type YourXamlPrefix:CustomDataGridTextColumn}}}" />
显然,如果这种方法有效,那么当Style
应用于父类型为CustomDataGridTextColumn
的对象时,仅才能正常工作正确地将YourXamlPrefix
命名空间声明为XAML中自定义列的CLR命名空间。