如何获得Google Chrome浏览器搜索等WPF搜索框样式?

时间:2010-12-27 12:39:57

标签: wpf xaml search google-chrome styles

我打算在WPF中使用Google Chrome浏览器中的搜索功能。样本如下所示

alt text


我已准备好后端代码,但我希望有一个类似下面所示的TextBox - 我也可以在其中显示结果(如0中的0)。
我也希望下一个和上一个的箭头标记。
如何在XAML中的WPF中设计这样的TextBox?请指导我。

2 个答案:

答案 0 :(得分:2)

可以使用以下代码创建自定义控件:

public class SearchTextBox : Control
{
    public String Text
    {
        get { return (String)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(String), typeof(SearchTextBox), new UIPropertyMetadata(null));

    public String SearchStatusText
    {
        get { return (String)GetValue(SearchStatusTextProperty); }
        set { SetValue(SearchStatusTextProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SearchStatusText.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SearchStatusTextProperty =
        DependencyProperty.Register("SearchStatusText", typeof(String), typeof(SearchTextBox), new UIPropertyMetadata(null));

    static SearchTextBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(SearchTextBox), new FrameworkPropertyMetadata(typeof(SearchTextBox)));
    }
}

Generic.xaml中的样式

<Style TargetType="{x:Type local:SearchTextBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:SearchTextBox}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBox Grid.Column="0"
                                 Text="{TemplateBinding Text}" />
                        <TextBlock Grid.Column="1"
                                   Text="{TemplateBinding SearchStatusText}"></TextBlock>
                        <Button Grid.Column="2">
                            <Polyline Points="0,10 5,0 10,10"
                                      Stroke="Black"
                                      StrokeThickness="2" />
                        </Button>
                        <Button Grid.Column="3">
                            <Polyline Points="0,0 5,10 10,0"
                                      Stroke="Black"
                                      StrokeThickness="2" />
                        </Button>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您需要根据需要进行更改。但这应该是一个很好的起点。

答案 1 :(得分:0)

您的需求没有现成的解决方案。您必须使用现有控件的控件模板进行相当多的操作,或者您可以从头开始构建自定义控件。

http://msdn.microsoft.com/en-us/library/aa970773%28VS.85%29.aspx