1

我有用于搜索的文本框,我希望在其中包含提示文本以提示用户进行搜索以及放大镜图标。我正在使用一种VisualBrush样式,我想要最左边的标签和最右边的图像,但我无法获得VisualBrush填充整个文本框的内容。它们要么在左边粘在一起,要么在右边粘在一起,这取决于我AlignmentXVisualBrush. 我尝试过使用StackPanel, DockPanelGrid但它们都不会填满整个文本框,让我在文本框的两端都有元素。

<VisualBrush x:Key="CueBannerBrush"
             AlignmentX="Left"
             AlignmentY="Center"
             Stretch="None">
  <VisualBrush.Visual>
    <DockPanel HorizontalAlignment="Stretch">
      <Label Content="Begin typing to search"
             Foreground="LightGray"
             DockPanel.Dock="Left" />
      <Image Source="/WPF;component/Icons/32/Modern3D/objects/magnifier.png"
             Height="20"
             DockPanel.Dock="Right" />
    </DockPanel>
  </VisualBrush.Visual>
</VisualBrush>

产生这个输出:

在此处输入图像描述

关于如何让画笔的孩子填充整个文本框并将提示文本与放大镜图标分开的任何建议?

4

1 回答 1

3

您可以将其包装在 a 中Grid,并为每个项目(标签、图像)创建正确的列大小,然后您可以VisualBrush widthTexbox ActualWidth.

<VisualBrush x:Key="CueBannerBrush"
             AlignmentX="Left"
             AlignmentY="Center"
             Stretch="None">
  <VisualBrush.Visual>
    <Grid Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=TextBox}}">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="163*" />
        <ColumnDefinition Width="26" />
      </Grid.ColumnDefinitions>
      <Label Content="Begin typing to search"
             Foreground="LightGray"
             Grid.Column="0" />
      <Image Source="http://icons.iconarchive.com/icons/awicons/vista-artistic/24/search-icon.png"
             Height="20"
             Grid.Column="1" />
    </Grid>
  </VisualBrush.Visual>
</VisualBrush>

结果:

在此处输入图像描述

于 2013-02-13T23:44:10.627 回答