2012-06-23 196 views
0

如何在WPF中創建一個TextBox(帶有XAML),其中有一個按鈕,就像Google Chrome Adressbar一樣。 我要像下面的圖片出頭:帶按鈕的文本框

enter image description here

而且那我怎麼才能改變按鈕的位置,左,右? (我使用C#)

+0

爲此目的創建您自己的'UserControl'。 –

回答

0

做的方式這樣的:

<Border x:Name="TextboxBorder" BorderBrush="#FFB8AAAA" BorderThickness="1" Grid.Column="2"  Margin="3,1.5,4.084,1.5" Height="27" Background="White" CornerRadius="3"> 
    <Grid x:Name="TextboxGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="33"/> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="btn" Grid.Column="1" Margin="3.5,4.833,4.5,3.5" BorderBrush="{x:Null}" Style=" {DynamicResource  SearchButtonStyle}" > 
      <Button.Background> 
       <ImageBrush ImageSource="Images/search.png"/> 
      </Button.Background> 
     </Button> 
     <TextBox Padding="0,1.2,0,0" x:Name="txt" Margin="1.541,0.5,2.041,0.5"  TextWrapping="Wrap" Text="سلام" BorderThickness="0" FontSize="16"/> 
    </Grid> 
</Border> 

和按鈕樣式:

<Style x:Key="SearchButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> 
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Padding" Value="1"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type Button}"> 
     <Border BorderThickness="0" Margin="1.875,0.5,1.75,-0.375" Background="{TemplateBinding Background}"  Width="16" Height="16"/> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsKeyboardFocused" Value="true"/> 
       <Trigger Property="ToggleButton.IsChecked" Value="true"/> 
       <Trigger Property="IsEnabled" Value="false"> 
       <Setter Property="Foreground" Value="#ADADAD"/> 
       </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

而且隨後WPF岩石! !

1

,你可以窩在文本框的頂部的網格內的按鈕,因爲它聽起來像你只需要使用一次這樣的:

例如

<Grid> 
    <TextBox Text="Hello" /> 
    <Button HorizontalAlignment="Right" Content="Click Me" /> 
</Grid> 

唯一的問題是,文本會顯示在按鈕下方。另一種方法是製作自己的用戶控件或編輯文本框的控件模板(但這可能不具備您想要的功能)。

我會在2列網格的左列創建一個文本框,然後在右列的按鈕。然後刪除文本框的背景和邊框,並將此背景/邊框放在網格上。這將給出帶有按鈕的文本框的外觀,其中文本不能在按鈕

(例如,

<Border BorderBrush="LightGray" BorderThickness="1" Height="30"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
       <ColumnDefinition Width="auto"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <TextBox VerticalAlignment="Center" BorderBrush="Transparent" Background="Transparent" Text="Hello World this is a really long bit of text that wont go underneath the button (it will get clipped)"></TextBox> 
      <Button Content="Click me" Grid.Column="1" Margin="4"></Button> 
     </Grid> 
    </Border> 

你只能用唯一的問題是,是你最好的選擇,你沒有得到鉻懸停效果等等等等,用戶控件與控制模板,但是這給你一些想法

+0

當文本框得到焦點的技巧出現......你可以告訴我如何通過創建新的用戶控件來做到這一點(我沒有用戶控件的經驗) – mahdavipanah