WPF,TextBlock的这个绑定怎么实现? 本帖最后由 dsr5vbtb 于 2014-05-11 10:26:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每次Text变动的时候,在代码里重新构建Inlines 但是只有TextBox才有TextChanged事件啊,TextBlock没有这个事件 你可以自己写一个继承自 IValueConverter 的转换器,负责将string转换为颜色画刷。然后将 TextBlock 的前景色与这个控件自身的Text属性绑定在一起,并且绑定时使用这个自定义的转换器。你可以看看如何将一个控件的某属性与另一个控件的属性绑定(这里则是Name相同的同一个控件的两个属性),以及如何编写一个2、3行代码的Converter。 如果你摆着好几个文字说“不能绑定”,那么你不如将它改为StackPanel,里边放多个TextBlock。然后分别绑定。 但是只有TextBox才有TextChanged事件啊,TextBlock没有这个事件没有TextChanged就不会监视Text属性的变化了?从绑定源或者绑定自身入手都可以:Binding.TargetUpdated 附加事件 我写了一个自定义的转换器 <TextBlock Name="PART_TextBlocDetailSt" Grid.Column="1" Margin="20,0,0,0"> <TextBlock.Text> <MultiBinding Converter="{StaticResource TouZhuDetailStConverter}"> <Binding Path="TouZhuDetailSt"/> <Binding ElementName="PART_TextBlocDetailSt"/> </MultiBinding> </TextBlock.Text> </TextBlock>class TouZhuDetailStConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Run run = new Run(); run.Foreground = new SolidColorBrush(Colors.Red); run.Text = values[0].ToString(); (values[1] as TextBlock).Inlines.Add(run); //直接改变TextBlock 的Inlines return ""; //不设置Text } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); }}但是没有效果 这个属性又不要求实时输入改变,初始化的时候处理一下不好吗?string valueStr = textBlock1.Text; textBlock1.Text = ""; for (int i = 0; i < valueStr.Length; i++) { if (valueStr[i] == '5' || valueStr[i] == '8') { Run run = new Run(); run.Foreground = new SolidColorBrush(Colors.Red); run.Text = valueStr[i].ToString(); textBlock1.Inlines.Add(run); //textBlock1.Text += string.Format("<Run Foreground=\"Red\">{0}</Run>", valueStr[i]); } else textBlock1.Inlines.Add(valueStr[i].ToString()); } TextBlock值又不能修改,你在初始化的时候处理一下就好了。 TextBlock的Text属性值,在XAML中是实行了绑定的啊,阁下这段代码放在哪里呢?TextBlock可没有TextChanged事件啊 TextBlock的Text属性值,在XAML中是实行了绑定的啊,阁下这段代码放在哪里呢?TextBlock可没有TextChanged事件啊用textbox, IsReadonly设置为True 使用转换类,将绑定的内容使用run拼接后返回。 可是绑定的是Text啊,并非Inlines,返回Run没有作用啊。6楼的代码就是那样的,但是没效果 我有一个关于C#序列化的问题... 小白问个继承的小问题 多语言版本本地化问题提问 如何计算时间相减?例如:19:20-17:50=1:30 powerdesigner逆向工程问题 如何关闭mdi子窗体后再次打开? 请问怎么调用C#的系统时间函数 无法重写继承成员?? 十万火急,各位大侠救我 请问:水晶报表的数据源可以是Adapter?可以动态的绑定吗? md5算法加密 c#如何截取带汉字的部分和数字部分
没有TextChanged就不会监视Text属性的变化了?从绑定源或者绑定自身入手都可以:
Binding.TargetUpdated 附加事件
<TextBlock.Text>
<MultiBinding Converter="{StaticResource TouZhuDetailStConverter}">
<Binding Path="TouZhuDetailSt"/>
<Binding ElementName="PART_TextBlocDetailSt"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
class TouZhuDetailStConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Run run = new Run();
run.Foreground = new SolidColorBrush(Colors.Red);
run.Text = values[0].ToString();
(values[1] as TextBlock).Inlines.Add(run); //直接改变TextBlock 的Inlines
return ""; //不设置Text
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}但是没有效果
string valueStr = textBlock1.Text;
textBlock1.Text = "";
for (int i = 0; i < valueStr.Length; i++)
{
if (valueStr[i] == '5' || valueStr[i] == '8')
{
Run run = new Run();
run.Foreground = new SolidColorBrush(Colors.Red);
run.Text = valueStr[i].ToString();
textBlock1.Inlines.Add(run);
//textBlock1.Text += string.Format("<Run Foreground=\"Red\">{0}</Run>", valueStr[i]);
}
else
textBlock1.Inlines.Add(valueStr[i].ToString());
}