如何在WPF中創建一個TextBox(帶有XAML),其中有一個按鈕,就像Google Chrome Adressbar一樣。 我要像下面的圖片出頭:帶按鈕的文本框
而且那我怎麼才能改變按鈕的位置,左,右? (我使用C#)
如何在WPF中創建一個TextBox(帶有XAML),其中有一個按鈕,就像Google Chrome Adressbar一樣。 我要像下面的圖片出頭:帶按鈕的文本框
而且那我怎麼才能改變按鈕的位置,左,右? (我使用C#)
做的方式這樣的:
<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岩石! !
,你可以窩在文本框的頂部的網格內的按鈕,因爲它聽起來像你只需要使用一次這樣的:
例如
<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>
你只能用唯一的問題是,是你最好的選擇,你沒有得到鉻懸停效果等等等等,用戶控件與控制模板,但是這給你一些想法
當文本框得到焦點的技巧出現......你可以告訴我如何通過創建新的用戶控件來做到這一點(我沒有用戶控件的經驗) – mahdavipanah
爲此目的創建您自己的'UserControl'。 –