带有背景图像和颜色的文本框

3

我有一个文本框控件,我想设置背景图片和背景颜色。

目前我只能设置其中一个,不能同时设置两个。当我尝试同时设置两个时,会收到“属性'Background'被设置多次”的错误提示。

这是我使用的代码:

<TextBox Name="tbImageTextBox">
      <TextBox.Background>
           <ImageBrush ImageSource="/Resources/Images/image.png" 
                  AlignmentX="Right" Stretch="None"/>
           <SolidColorBrush>#FF8D8A8A</SolidColorBrush>
      </TextBox.Background>
</TextBox>

我还尝试在文本框的样式和<TextBox.Background>中设置背景颜色,但是颜色被忽略了。

4个回答

7

根据需要使用网格资源作为背景。同一资源可以用于多个文本框。

<Grid>
    <Grid.Resources>
        <ImageBrush x:Key="img" ImageSource="Blue hills.jpg"></ImageBrush>
        <SolidColorBrush x:Key="brownBrush" Color="Brown"></SolidColorBrush>
    </Grid.Resources>

    <TextBox x:Name="test" Background="{StaticResource img}" Width="100" Height="40" />
</Grid>

2

我最终将文本框放入一个带有背景颜色的网格中,并将背景图像应用于文本框本身,因为使用VisualBrush和DrawingBrush会拉伸我的图像,或者仅将背景颜色应用于图像 - 而不是应用于文本框的其余部分。


这是我使用的解决方案,比使用视觉或绘图笔刷要直接得多。 - undefined
我正在尝试为我的文本框创建一个自定义样式,使其看起来更扁平,并具有绑定的背景颜色。同时,我还想根据一些数据触发器添加一张图片。当使用标准的文本框时,我可以按照你在这里所说的做法,效果很好,但边框看起来很糟糕(我正在从这些文本框中创建一个网格)。所以我需要了解如何让我的自定义样式获取容器的背景颜色,有什么建议吗? - undefined
@Akuma 你将边框设置为透明了吗? - undefined

1
您需要将颜色和图像合并到单个Brush实例中,您可以使用包含图像的Image控件和背景设置为颜色的DrawingBrushVisualBrush

我在使用这种方法时遇到了图像拉伸的问题。如果我将 Stretch 设置为 None,只有图像的背景颜色会应用,而 TextBox 的其他部分则不会。如果我不设置 Stretch 为 "None",那么图像将被拉伸到整个 TextBox。有没有绕过这个问题的方法?<VisualBrush Stretch="None"> <VisualBrush.Visual> <Grid Background="DarkGray"> <Image Source="image.jpg"/> </Grid> </VisualBrush.Visual> </VisualBrush> - undefined
@binncheol:嗯,我建议你研究一下绘画刷,视觉刷总的来说有点笨拙。也许这篇文章可以帮助你入门:使用图像、绘画和可视对象进行绘制 | 如果你必须使用视觉刷:你可以尝试将网格大小绑定到(实际)文本块的大小。 - undefined

1

你可能需要使用 VisualBrush 或者 DrawingBrush。更多的信息可以在MSDN 这里找到。以下代码或许可以帮助你进行开发:

<Rectangle Width="75" Height="75">
  <Rectangle.Fill>
    <VisualBrush TileMode="Tile">
      <VisualBrush.Visual>
        <Grid>
          <Image BaseUri="somepic.png" />
          <Rectangle Brush="FF8D8A8A" />  
        </Grid>
      </VisualBrush.Visual>
    </VisualBrush>
  </Rectangle.Fill>
</Rectangle>

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