2013-08-14 15 views
6

Pracuję nad kontrolą dla mojej aplikacji WPF, w której chcę Button wewnątrz TextBox. Button będzie zawierał obraz, który zmienia się po najechaniu kursorem myszy, ale już wiem, jak to zrobić. To, z czym mam problem, to w rzeczywistości Button w TextBox, tak że zajmuje on tylko tyle miejsca, ile jest w obrazie i jest przezroczysty. Poniżej znajduje się markup że próbowałem dotąd:Jak dodać przycisk "Wyczyść" do pola tekstowego w WPF?

XAML:

<Grid> 
    <TextBox x:Name="SearchBoxView" HorizontalAlignment="Right" Width="200" Margin="5, 5, 10, 5" FontSize="16" KeyUp="SearchBoxKeyDown" Text="{Binding SearchText, Mode=TwoWay}" Grid.Column="0"/> 
    <Button Background="Transparent" HorizontalAlignment="Right" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"> 
    <Button.Content> 
     <Image Source="Image.png" Stretch="None" RenderOptions.BitmapScalingMode="NearestNeighbor" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
    </Button.Content> 
    </Button> 
</Grid> 

Mam następnie wraz z tym pytanie: How to implement a textbox with a clear button in wpf?, co również związane z tym artykułem: WPF Search Text Box. XAML zasugerowany w pytaniu nie zadziałał, co moim zdaniem wynika z tego, że używają one Style, do których nie mam dostępu. Artykuł dostarczył zbyt wiele informacji, głównie o wyzwalaczach i właściwościach zależności wymaganych w celu zamiany wyszukiwania i usuwania ikon na mouseover. Proszę o pomoc w znalezieniu prostego rozwiązania, jak to zrobić. Dziękuję Ci!

EDYCJA: Postąpiłam zgodnie z radą udzielonych odpowiedzi i jestem w stanie prawidłowo ustawić przycisk, ale nie pojawi się on w polu tekstowym, a jeśli tak, tekst nadal jest pod nim . Podaję XAML i obraz tego, co się dzieje:

XAML:

<Grid Margin="5, 5, 10, 5"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <TextBox x:Name="SearchBoxView" HorizontalAlignment="Right" Width="200" FontSize="16" KeyUp="SearchBoxKeyDown" Text="{Binding SearchText, Mode=TwoWay}" Grid.Column="0"/> 
    <Button Background="{Binding Backgound, ElementName=SearchBoxView}" HorizontalAlignment="Right" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Click="SearchBoxViewButtonClick" Grid.Column="1"> 
    <Button.Template> 
     <ControlTemplate> 
     <Border HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <Image Source="Image.png" Width="12" Height="12"/> 
     </Border> 
     </ControlTemplate> 
    </Button.Template> 
    </Button> 
</Grid> 

Obrazek:

Searchbox w/ Button

+0

Przy aktualnym XAML przycisk znajduje się w siatce i nie ma żadnych rzędów siatki. Dosłownie potrzebujesz przycisku w polu tekstowym lub tylko w sterowaniu? – Paparazzi

+0

@Blam Jeśli spojrzysz na mój komentarz dotyczący odpowiedzi ArsenMkrt, zobaczysz, czego potrzebuję, lub przynajmniej myślę, że potrzebuję. –

+0

OK, ale proponuję zmienić pytanie na przycisk w formancie, jeśli nie potrzebujesz go w TextBox. – Paparazzi

Odpowiedz

5

Określ Button szablon, zamiast zawartości

<Button> 
    <Button.Template> 
     <ControlTemplate> 
      <Border HorizontalAlignment="Center" VerticalAlignment="Center" > 
       <Image Source="pack://application:,,,/Organizr;component/DataLayer/Images/ActiveDeleteIcon.png" 
           Width="16" 
           Height="16"/> 
      </Border> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

EDYCJA

BTW, w twoim przypadku obraz będzie obejmować TextBox i wprowadzony tekst. Polecam umieścić tę kontrolę w różnych kolumnach siatki, jak poniżej:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <TextBox x:Name="SearchBoxView" 
      HorizontalAlignment="Right" 
      Width="200" Margin="5, 5, 10, 5" 
      FontSize="16" 
      KeyUp="SearchBoxKeyDown" 
      Text="{Binding SearchText, Mode=TwoWay}" 
      Grid.Column="0"/> 

    <Button 
      Grid.Column="1" 
      Background="Transparent" 
      HorizontalAlignment="Right" 
      HorizontalContentAlignment="Center" VerticalContentAlignment="Center"> 
      <ControlTemplate> 
       <Border HorizontalAlignment="Center" VerticalAlignment="Center" > 
        <Image Source="pack://application:,,,/Organizr;component/DataLayer/Images/ActiveDeleteIcon.png" 
            Width="16" 
            Height="16"/> 
       </Border> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
+0

Ta odpowiedź zadziałała świetnie, ale zajmuję się problemem, w którym tekst zniknie za przyciskiem, ponieważ przycisk jest po prostu umieszczony nad polem tekstowym. Czy mimo to mogę umieścić przycisk w polu tekstowym? Zdaję sobie sprawę, że różni się to od mojego pierwotnego pytania, ale myślę, że właśnie tego potrzebuję. Dziękuję bardzo za dotychczasową pomoc. –

+0

tak, wstaw pole tekstowe i przycisk w różnych kolumnach siatki. Ustaw szerokość drugiej kolumny na Automatyczna, a pierwsza opuść domyślnie lub ustaw na *. jeśli chcesz ominąć krawędź pola tekstowego, możesz nadać temu przyciskowi niewielki minus. –

+0

Umieściłem pole tekstowe i przycisk w różnych kolumnach siatki, a przycisk pojawił się w połowie pola tekstowego. Tak więc pomieszałem z marginesami przycisku, a kiedy pokazałem go w polu tekstowym, tekst pola tekstowego nadal znajduje się pod przyciskiem. Chciałbym, żeby zatrzymał się przy przycisku. –

Powiązane problemy