Как получить стиль окна поиска WPF, такой как поиск в браузере GoogleChrome? - PullRequest
0 голосов
/ 27 декабря 2010

Я планирую использовать функцию поиска в WPF, как это происходит в браузере Google Chrome. Образец показан ниже

alt text


У меня есть готовый бэкэнд-код, но я хочу иметь TextBox, подобный показанному ниже, в котором я также могу отображать результаты (например, 0 из 0)
Также я хотел бы иметь стрелки для следующего и пред.
Как мне создать такой TextBox в WPF в XAML? Пожалуйста, помогите мне относительно того же.

Ответы [ 2 ]

2 голосов
/ 27 декабря 2010

Пользовательский элемент управления можно создать с помощью следующего кода:

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>

Вам потребуется изменить его в соответствии с вашими потребностями.Но это должно стать хорошей отправной точкой.

0 голосов
/ 27 декабря 2010

Не существует готового решения, отвечающего вашим требованиям. Вам придется поиграться с шаблонами элементов управления существующих элементов управления, или вы можете создать собственный элемент управления с нуля.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...