VisualBrush中的TextBox.Background属性表现异常

3

这个问题的基础上,我有一个定义如下的文本框:

<TextBox>
    <TextBox.Background>
        <VisualBrush Stretch="Uniform">
            <VisualBrush.Visual>
                <StackPanel>
                    <TextBlock Background="Blue" Opacity="0.5" Text="155"/>
                </StackPanel>
            </VisualBrush.Visual>
        </VisualBrush>
    </TextBox.Background>
</TextBox>

这将导致像这样的TextBox

带背景的文本框

现在,如果我删除背景属性,TextBox看起来像这样:

没有背景的文本框

我想要的是在有彩色背景的情况下实现第二张图片的效果。例如,在第一张图片中,我希望背景颜色也填充剩余的白色空间。
1个回答

1

您可以通过添加带有背景的Grid,并将其作为VisualBrush来实现此目标,在该网格中,您可以添加您的TextBox

<Grid>
    <Grid.Style>
        <Style TargetType="Grid">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="Fill">
                        <VisualBrush.Visual>
                            <Rectangle Stretch="Fill" Stroke="Blue" Opacity="0.5" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Style>
    <TextBox>
        <TextBox.Style>               
            <Style TargetType="TextBox">
                <Setter Property="Foreground" Value="Black" />                    
                <Setter Property="Background">
                    <Setter.Value>
                        <VisualBrush Stretch="Uniform">
                            <VisualBrush.Visual>
                                <TextBlock Foreground="Gray" Opacity="0.5" Text="155"/>
                            </VisualBrush.Visual>
                        </VisualBrush>
                    </Setter.Value>
                </Setter>
            </Style>
        </TextBox.Style>
    </TextBox>
</Grid>

这样做会使所有东西,包括输入到文本框中的任何内容,都变成半透明。 - John Bowen
@JohnBowen 请再次检查我的答案。我通过在网格中使用“VisualBrush”解决了那个问题。 - kmatyaszek
你可以在网格上直接设置 Background="#800000FF",而不必添加所有这些复杂性。 - John Bowen
@DukeCyrillus,你可以使用我的解决方案来完成这个任务。你有什么条件要求吗? - kmatyaszek
@kmatyaszek TextBox实际上是继承TextBox的自定义控件。它的背景是一个TextBlock,用于显示字符计数,目前当剩余一定数量的字符时计数会改变颜色。然而,我希望背景也能改变颜色,并且更改颜色的逻辑应该驻留在自定义控件的代码中,这就是为什么我希望它成为TextBlock背景的原因。 - Duke Cyrillus
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接