Как добавить значок поиска в textbox, создав свой стиль в Avalonia?

Рейтинг: 0Ответов: 1Опубликовано: 06.03.2023

Мне нужно отредактировать свой textbox, добавив в него значок поиска. Желательно, чтобы он был как watermark, но не обязательно. Я так понимаю это можно сделать с помощью, того что разделить textbox c помощью grid и потом добавить Image. Оформить надо с помощью стиля

Ответы

▲ 0

В общем я так сделал: Я просто скопировал код стиля с шаблона textbox(https://github.com/AvaloniaUI/Avalonia/blob/master/src/Avalonia.Themes.Fluent/Controls/TextBox.xaml) и добавил Image в него со свойством IsVisible="{TemplateBinding Text, Converter={x:Static StringConverters.IsNullOrEmpty}, ConverterParameter=False}". Вот так выглядит: введите сюда описание изображения

Вот сам код, возможно можно некоторые свойства убрать:

<Style Selector="TextBox">
        <Setter Property="Template">
            <ControlTemplate>
                <DataValidationErrors>
                    <Panel>
                        <Border
                          Name="PART_BorderElement"
                          Background="{TemplateBinding Background}"
                          BorderBrush="{TemplateBinding BorderBrush}"
                          BorderThickness="{TemplateBinding BorderThickness}"
                          CornerRadius="1"
                          MinWidth="{TemplateBinding MinWidth}"
                          MinHeight="{TemplateBinding MinHeight}">
                        </Border>

                        <Border
                          Margin="{TemplateBinding BorderThickness}">
                            <Grid ColumnDefinitions="Auto,*,Auto" >
                                <ContentPresenter Grid.Column="0"
                                                  Grid.ColumnSpan="1"
                                                  Content="{TemplateBinding InnerLeftContent}"/>
                                <DockPanel x:Name="PART_InnerDockPanel"
                                           Grid.Column="1"
                                           Grid.ColumnSpan="1"
                                           Cursor="IBeam"
                                           Margin="{TemplateBinding Padding}">
                                    <TextBlock Name="PART_FloatingWatermark"
                                               Foreground="{DynamicResource SystemAccentColor}"
                                               FontSize="{TemplateBinding FontSize}"
                                               IsVisible="False"
                                               Text="{TemplateBinding Watermark}"
                                               DockPanel.Dock="Top" />
                                        <Panel>                                     
                                            <TextBlock Name="PART_Watermark"
                                                    Opacity="0.5"
                                                    Text="Search here"
                                                    TextAlignment="{TemplateBinding TextAlignment}"
                                                    TextWrapping="{TemplateBinding TextWrapping}"
                                                    IsVisible="{TemplateBinding Text, Converter={x:Static StringConverters.IsNullOrEmpty}}"
                                                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                                            </TextBlock>
                                            <TextPresenter Name="PART_TextPresenter"
                                                          Text="{TemplateBinding Text, Mode=TwoWay}"
                                                          CaretIndex="{TemplateBinding CaretIndex}"
                                                          SelectionStart="{TemplateBinding SelectionStart}"
                                                          SelectionEnd="{TemplateBinding SelectionEnd}"
                                                          TextAlignment="{TemplateBinding TextAlignment}"
                                                          TextWrapping="{TemplateBinding TextWrapping}"
                                                          LineHeight="{TemplateBinding LineHeight}"
                                                          LetterSpacing="{TemplateBinding LetterSpacing}"
                                                          PasswordChar="{TemplateBinding PasswordChar}"
                                                          RevealPassword="{TemplateBinding RevealPassword}"
                                                          SelectionBrush="{TemplateBinding SelectionBrush}"
                                                          SelectionForegroundBrush="{TemplateBinding SelectionForegroundBrush}"
                                                          CaretBrush="{TemplateBinding CaretBrush}"
                                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                    </Panel>                                    
                                    <Image Source="/Assets/search.png"
                                           Opacity="0.5"
                                           HorizontalAlignment="Right"
                                           VerticalAlignment="Center"
                                           Margin="0,0,5,0"
                                           Width="20"
                                           Height="20"
                                           IsVisible="{TemplateBinding Text, Converter={x:Static StringConverters.IsNullOrEmpty}, ConverterParameter=False}"/>
                                </DockPanel>
                                <ContentPresenter Grid.Column="2" Grid.ColumnSpan="1" Content="{TemplateBinding InnerRightContent}"/>
                            </Grid>
                        </Border>
                    </Panel>
                </DataValidationErrors>
            </ControlTemplate>
        </Setter>
    </Style>