2013-02-13 89 views
1

我有用於搜索的文本框,並且我希望在其中提示文本提示用戶搜索以及放大鏡圖標。我使用的是VisualBrush風格,我想要最左邊的標籤和最右邊的圖片,但我無法獲取VisualBrush的內容來填充整個文本框。它們要麼粘在左邊,要麼粘在右邊,這取決於我如何在我的VisualBrush上設置AlignmentX。我嘗試過使用StackPanelDockPanelGrid,它們都不會填滿整個文本框,並讓我在文本框的兩端添加元素。如何讓VisualBrush在Xaml中填充它的容器?

<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> 

產生這樣的輸出:

enter image description here

對我怎樣才能刷的孩子充滿整個文本框,並獨立於放大鏡圖標的提示文本有什麼建議?

回答

3

你可以把它包在一個Grid,而不是創造正確的列大小爲每個項目(標籤,圖像) 然後,你可以綁定VisualBrushwidthTexboxActualWidth

<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> 

結果:

enter image description here