带有WPF中的图像图标的TextBox

时间:2016-07-11 10:14:26

标签: wpf image textbox

我想在其中创建包含图片的TextBox。这就是我的尝试:

<DockPanel Grid.Row="1" Grid.Column="1" Margin="5" >
    <Image DockPanel.Dock="Left" Source="D:\my_backup\WPF\SALIENT\SALIENT\Images\d2.PNG" Width="20" Height="20"></Image>
        <TextBox  Text="test" FontSize="16" HorizontalAlignment="Stretch" Background="Transparent"                                    
        </TextBox>
</DockPanel>

这给了我这样的输出:img

但我希望TextBox内的图像像img

一样

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:3)

您可以使用此类实施。 你可能应该让用户控制它。

<Border BorderBrush="Black"
            BorderThickness="2"
            VerticalAlignment="Center"
            CornerRadius="5">

        <StackPanel Margin="5"
                    Orientation="Horizontal">

            <Image Source="C:\SourceOfTheImage\Path\Image.png" 
                   Height="18"/>
            <TextBlock Text="Hello, I am a text block!"
                       Margin="3 0 0 0"/>

        </StackPanel>


    </Border>

对我来说这看起来像是

答案 1 :(得分:3)

您可以在Textbox上设置background属性,如下所示(我的框右对齐):

<TextBox x:Name="txtSearch"
         Text="Search Item...">
    <TextBox.Background>
        <ImageBrush ImageSource="Images/Search.png" Stretch="Uniform" AlignmentX="Right">
            <ImageBrush.Transform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform X="-3"/>                        
                </TransformGroup>
            </ImageBrush.Transform>
        </ImageBrush>
    </TextBox.Background>
</TextBox>

如果要在左侧查看图像,请将AlignmentX设置为左侧。将TranslateTransform.X设置为正值可增加边距。

答案 2 :(得分:1)

试试这个:

<Border Padding="5" BorderThickness="2,2,2,2" BorderBrush="Gray" CornerRadius="2,2,2,2">
    <DockPanel Grid.Row="1" Grid.Column="1" Margin="5" >
         <Image DockPanel.Dock="Left" Source="D:\my_backup\WPF\SALIENT\SALIENT\Images\d2.PNG" Width="20" Height="20"></Image>
         <TextBox  Text="test" FontSize="16" HorizontalAlignment="Stretch" Background="Transparent" BorderBrush="Transparent" ></TextBox>
    </DockPanel>
</Border>

这将是最简单的一次性做法。 您可以将其转储到UserControl中以供重用。

实现这一目标的第二种方法是打开TextBox模板并将你的这个图标放在TextBox的构成中,这样可以避免在这里需要DockPanel和Border,以及允许你制作模板是您以后可以轻松附加到任何文本框的资源。