WPF中DataGrid控件内字符角标

目前有一DataGrid控件,其中的字符来源于后台代码,是字符串绑定到DataGridTextColum控件上
前台XAML代码绑定后台字符串 S

<DataGridTextColum Width="Auto" MinWidth="200" Binding=“”{Binding S}>
	<DataGridTextColum.Header>
		<TextBlock Text="{DynamicResource 符号}" FontWeight="Bold" Margin="30 0 0 0"/>
	</DataGridTextColum.Header>
</DataGridTextColum>

后台代码中的 S

//实现INotifyPropertyChanged接口
[field: NoSerializedAttribute()]
#pragma warning disable CS1591
public event PropertyChangedEventHandler PropertyChanged;
#pragma warning restore CS1591

public virtual void OnPropertyChanged([CallerMemberName] string propertyName=nall)
{
	PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}

private string s;
public string S
{
	get
	{
		return s;
	}
	set
	{
		s=value;
		OnProPertyChanged("S");
	}
}

现预期使部分符号转换为角标形式,实现思路为将原本的绑定字符串改为绑定Paragraph,在Paragraph中根据需求添加多个Run,根据需求将Run的的样式设置为角标。
修改前台控件为如下:

<DataGridTemplateColum Width="Auto" MinWidth="200">
	<DataGridTemplateColum.Header>
		<TextBlock Text="{DynamicResource 符号}" FontWeight="Bold" Margin="30 0 0 0"/>
	</DataGridTemplateColum.Header>
	<DataGridTemplateColum.CellTemplate>
		<DataTemplate>
			<FlowDocumentScrollViewer Document="{Binding S,Converter={StaticResource ParagraphToFlowDocumentConverter}}" 
			VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" IsHitTestVisible="False" 
			Width="300" Margin="10 -15 10 0"/>
		</DataTemplate>
	</DataGridTemplateColum.CellTemplate>
</DataGridTemplateColum>

ParagraphToFlowDocumentConverter值转换器内容

public class ParagraphToFlowDocumentConverter:IValueConverter
{
	public object Conver(object value,Type targetType,object paramter,CultureInfo culture)
	{
		if(value is Paragraph paragraph)
		{
			var flowDocument = new FlowDocument();
			flowDocument.Blocks.Add(paragraph);
			return flowDocument;
		}
		return null;
	}
	
	public object ConvertBack(object value,Type targetType,object parameter,CultureInfo culture)
	{
		throw new NotImplementedException():
	}

修改后台 S 类型

private Paragraph s;
public Paragraph S
{
	get
	{
		return s;
	}
	set
	{
		s=value;
		OnProPertyChanged("S");
	}
}

有参构造函数中

public Ca(string n)
{
	if(判断条件)
	{
		S=...//此处根据需求将字符串中某些符号改为角标
		//思路为将单个字符放于Run中
		Run run=new Run(截取的需要变角标的字符串);
		//再根据需求设置run的样式Style,随后放入paragraph
		Paragraph paragraph=new Paragraph();
		paragraph.Inlines.Add(run);
	}
	else
	{
		Run run=new Run(n);
		S=new Paragraph(run);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值