带有按钮的文本框

时间:2012-06-23 13:54:10

标签: c# wpf xaml textbox

如何在WPF(使用XAML)中创建一个TextBox,其中有一个按钮,就像Google Chrome Adressbar一样。 我想要的东西如下图所示:

enter image description here

然后我怎样才能将按钮的位置改为左右? (我正在使用C#)

2 个答案:

答案 0 :(得分:1)

您可以将按钮嵌套在TextBox顶部的Grid中,因为听起来您只需要使用一次:

e.g。

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

唯一的问题是文本会显示在按钮下方。另一种方法是创建自己的usercontrol或编辑文本框的controltemplate(但这可能没有你想要的功能)。

我会在2列网格的左栏中创建一个文本框,然后在右列中创建一个按钮。然后删除文本框上的背景和边框,并将此背景/边框放在网格上。这将为文本框的外观提供一个按钮,其中文本不能位于按钮下面

e.g。

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

只有你遇到的问题是你没有获得chrome悬停效果等等。带控件模板的Usercontrol是你最好的选择,但这会给你一些想法

答案 1 :(得分: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摇滚!!!