Wpf 部分文本颜色更新

Wpf 部分文本颜色更新,wpf,textblock,Wpf,Textblock,这是我所知道的 <StackPanel> <TextBlock> abc </TextBlock> <Textblock> def </Textblock> <Textblock> ghi </Textblock> </Stackpanel> abc def ghi 现在在GUI上,我用单行显示所有三个textblock的文本,如:abcdefghi。我想更新部分文本颜色

这是我所知道的

<StackPanel>
    <TextBlock> abc </TextBlock>
    <Textblock> def </Textblock>
    <Textblock> ghi </Textblock>
</Stackpanel>

abc
def
ghi
现在在GUI上,我用单行显示所有三个textblock的文本,如:abcdefghi。我想更新部分文本颜色(无论文本属于哪个文本块)。
假设我想将总文本的40%的颜色更改为红色,其他颜色更改为白色。(百分比数量也太可变)它将通过绑定进行更新。因此,没有对文本%和任何特定文本块进行硬编码


完成人-。

您可以使用一个
文本块
、一个
线性渐变
和一些附加属性来完成此操作,只要您不介意字母部分着色

编辑:我决定写一篇文章,展示带有附加属性的解决方案,但与此同时,您可以使用简单的XAML和绑定,如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock FontSize="34" FontWeight="Bold"
               Text="{Binding Value, ElementName=slider, StringFormat={}{0:p0} of this text is coloured}">
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="1 0">
                <GradientStop Color="BurlyWood" />
                <GradientStop Color="BurlyWood" Offset="{Binding Value, ElementName=slider}" />
                <GradientStop Color="Beige" Offset="{Binding Value, ElementName=slider}" />
                <GradientStop Color="Beige" Offset="1" />
            </LinearGradientBrush>
        </TextBlock.Foreground>
    </TextBlock>

    <Slider x:Name="slider" Grid.Row="1" Minimum="0" Maximum="1" Value="0.4" />
</Grid>


如果您对使用附加属性的解决方案感兴趣,可以访问我的博客。

为什么使用3个文本块而不是一个richTextBox?您可以在我添加的链接中看到原因您可以使用
多重绑定来实现“x/y”不使用多个
TextBlock
s进行显示。我认为,加上我下面的技术,将达到您想要的效果。实际上我已经做了这件事,但您的博客非常有用,因此将其标记为答案:)。。。