本帖最后由 dsr5vbtb 于 2014-05-11 10:26:02 编辑

解决方案 »

  1.   

    每次Text变动的时候,在代码里重新构建Inlines
      

  2.   

    但是只有TextBox才有TextChanged事件啊,TextBlock没有这个事件
      

  3.   

    你可以自己写一个继承自 IValueConverter 的转换器,负责将string转换为颜色画刷。然后将 TextBlock 的前景色与这个控件自身的Text属性绑定在一起,并且绑定时使用这个自定义的转换器。你可以看看如何将一个控件的某属性与另一个控件的属性绑定(这里则是Name相同的同一个控件的两个属性),以及如何编写一个2、3行代码的Converter。
      

  4.   

    如果你摆着好几个文字说“不能绑定”,那么你不如将它改为StackPanel,里边放多个TextBlock。然后分别绑定。
      

  5.   

    但是只有TextBox才有TextChanged事件啊,TextBlock没有这个事件
    没有TextChanged就不会监视Text属性的变化了?从绑定源或者绑定自身入手都可以:
    Binding.TargetUpdated 附加事件
      

  6.   

    我写了一个自定义的转换器 <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();
        }
    }但是没有效果
      

  7.   

    这个属性又不要求实时输入改变,初始化的时候处理一下不好吗?
    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());
                }
      

  8.   

    TextBlock值又不能修改,你在初始化的时候处理一下就好了。
      

  9.   

    TextBlock的Text属性值,在XAML中是实行了绑定的啊,阁下这段代码放在哪里呢?TextBlock可没有TextChanged事件啊
      

  10.   

    TextBlock的Text属性值,在XAML中是实行了绑定的啊,阁下这段代码放在哪里呢?TextBlock可没有TextChanged事件啊用textbox, IsReadonly设置为True
      

  11.   

    使用转换类,将绑定的内容使用run拼接后返回。
      

  12.   

    可是绑定的是Text啊,并非Inlines,返回Run没有作用啊。6楼的代码就是那样的,但是没效果