从WPF迁移至Avalonia:DataGridTextColumn样式设置难题
Avalonia中DataGridTextColumn样式适配方案
Avalonia的DataGrid控件实现与WPF存在差异,直接迁移WPF的CellTemplate写法会失效,以下是适配后的代码:
<DataGridTextColumn Binding="{Binding Name}" Header="Имя"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridCell"> <Label> <Label.Content> <MultiBinding Converter="{StaticResource TextBoxMiscConverter}"> <Binding Path="Name"/> <Binding Path="IsChecked" Source="{x:Reference ShowEnglishCbx}"/> <Binding Path="IsChecked" Source="{x:Reference ShowRussianCbx}"/> </MultiBinding> </Label.Content> </Label> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn>
关键修改点:
- Avalonia中引用命名控件需用
{x:Reference}替代WPF的ElementName - ControlTemplate的TargetType无需
{x:Type}前缀,直接指定控件类型名 - 若无需Label的额外样式,可替换为更轻量的TextBlock优化性能:
<ControlTemplate TargetType="DataGridCell"> <TextBlock> <TextBlock.Text> <MultiBinding Converter="{StaticResource TextBoxMiscConverter}"> <Binding Path="Name"/> <Binding Path="IsChecked" Source="{x:Reference ShowEnglishCbx}"/> <Binding Path="IsChecked" Source="{x:Reference ShowRussianCbx}"/> </MultiBinding> </TextBlock.Text> </TextBlock> </ControlTemplate>
注意:确保ShowEnglishCbx和ShowRussianCbx已通过x:Name正确命名,且处于当前XAML的可访问命名范围内。
内容的提问来源于stack exchange,提问作者Sfairait
相关产品推荐
相关产品推荐

