When the SelectionMode of RadAutoCompleteBox is changed, the search text is cleared. However, this clears only the Text property of the underlying TextBox element. The SearchText property of the control is not cleared.
To work this around, you can manually set the SearchText after setting the SelectionMode.this.autoCompleteBox.SelectionMode = AutoCompleteSelectionMode.Multiple;
this.autoCompleteBox.SearchText = null;
By default the TextSearchPath of RadAutoCompleteBox is automatically assigned when the DisplayMemberPath is set, and if the TextSearchPath is not yet assigned. However, this happens only initially. Runtime changes of the DisplayMemberPath don't update the text search path.
To work this around, set the TextSearchPath manually when you change the DisplayMemberPath.
Please add a simple way to show "Clear all" button in a MultiSelect mode to clear all selected items, so we don't have to customize entire control template. Added properties could be at least those: IsClearAllButtonVisible and ClearAllButtonTemplate.
Best regards,
Vladimir
When using Windows 11 theme with 4.5 NoXaml binaries, AutoCompleteBox reports a XAML Binding Failure:
To reproduce, just run the following window (just an empty AutoCompleteBox) in a new WPF Framework project:
<Window x:Class="WpfApp20.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp20" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Telerik.Windows.Themes.Windows11;component/Themes/System.Windows.xaml"/>
<ResourceDictionary Source="/Telerik.Windows.Themes.Windows11;component/Themes/Telerik.Windows.Controls.xaml"/>
<ResourceDictionary Source="/Telerik.Windows.Themes.Windows11;component/Themes/Telerik.Windows.Controls.Input.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<telerik:RadAutoCompleteBox/>
</Grid>
</Window>
I've encountered a tiny bug when it comes to styling AutoCompleteBox using StyleManager.
If I set the StyleManager.ApplicationTheme of my app, the styling is correct, see the reference gif:
But if I set the style of AutoCompleteBox during runtime with StyleManager.SetTheme, the styling is not quite right - the underlying RadWatermarkBox is using the basic style I believe, because the text doesn't change it opacity when I hover over it (in the case of watermark text) or when I defocus the element (in the case of real text).
The example I'm using is just an empty WPF project with MainWindow.xaml having one RadAutoCompleteBox inside it, and MainWindow.xaml.cs is pictured in the gifs.
Best Regards,
Mateusz
Hi,
unfortunately, I have yet another bug report regarding the RadAutoCompleteBox. This time, it looks like a regression introduced in one of the last two Releases of Ui for WPF as we recently upgraded from 2021.3.914.45 to 2022.1.117.45 and the crash only happens with the newer version.
In one of our applications we get an InvalidOperationException: "Cannot modify the logical children for this node at this time because a tree walk is in progress." when setting RadPane.Hidden = true for a Pane that contains at least one RadAutoCompleteBox.
In the attached text file you can find the full stack trace. I noticed that RadPaneGroup inherits from RadTabControl so maybe the regression was caused by some of the changes in my other report regarding AutoCompleteBoxes in TabControls. The pattern seems to be the same at least: The crash only seems to occur if you type into the AutoCompleteBox and select an item from the DropDown.
Crash occurs if:
Crash does not occur if:
As a side note:
While debugging the issue I noticed that RadNavigationView seems to have an exception handler somewhere that silently swallows this exception, causing really strange behavior in the RadDocking control. I also attached a gif for this behavior (-UI.gif).
Telerik.Windows.Controls.Navigation.dll!Telerik.Windows.Controls.RadNavigationView.OnSelectionChangerSelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e = {System.Windows.Controls.SelectionChangedEventArgs}) Unknown
Telerik.Windows.Controls.dll!Telerik.Windows.Controls.SelectionChanger<System.__Canon>.InvokeSelectionChangedEvent(System.Windows.Controls.SelectionChangedEventArgs e) Unknown
Telerik.Windows.Controls.dll!Telerik.Windows.Controls.SelectionChanger<System.__Canon>.End() Unknown
Telerik.Windows.Controls.dll!Telerik.Windows.Controls.SelectionChanger<object>.AddJustThis(object item) Unknown
> Telerik.Windows.Controls.Navigation.dll!Telerik.Windows.Controls.RadNavigationView.UpdateSelection(System.Windows.Controls.Primitives.Selector targetSelector, object item) Unknown
Telerik.Windows.Controls.Navigation.dll!Telerik.Windows.Controls.RadNavigationView.NotifyNavigationViewItemClick(Telerik.Windows.Controls.RadNavigationViewItem container) Unknown
Telerik.Windows.Controls.Navigation.dll!Telerik.Windows.Controls.RadNavigationViewItem.OnClickInternal() Unknown
Telerik.Windows.Controls.Navigation.dll!Telerik.Windows.Controls.RadNavigationViewItem.OnClick() Unknown
PresentationFramework.dll!System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) Unknown
Regards
Simon Müller
Hofmann Fördertechnik GmbH
Hi,
while integrating a RadAutoCompleteBox into our application, I noticed a problem when binding to its SearchText and SelectedItem properties:
How we use the AutoCompleteBox:
We use the following XAML markup to create the AutoCompleteBox:
<telerik:RadAutoCompleteBox Grid.Column="0" x:Name="UnitSelectionAutoCompleteBox"
AutoCompleteMode="SuggestAppend"
DisplayMemberPath="UnitNumber"
IsEnabled="{Binding UnitNumberEnabled, Mode=OneWay}"
ItemsSource="{Binding UnitSelectionComponent.SearchResults, Mode=OneWay}"
SearchText="{Binding UnitSelectionComponent.UnitNumberSearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding UnitSelectionComponent.SelectedUnit, Mode=TwoWay}"
SelectionMode="Single"
TextSearchMode="Contains"
TextSearchPath="UnitNumber"
WatermarkContent="{StaticResource Loc.UnitNumber}">
</telerik:RadAutoCompleteBox>
Having bound both, the SelectedItem and the SearchText leads to the SearchText binding to break under some circumstances: If UnitSelectionComponent.SelectedUnit is not null when the UI is loaded initially, the SearchText property suddenly contains a hard-coded string instead of the binding we defined. However, there seems to be another required condition I don't know yet since I was not able to reproduce the problem in a simple demo project.
I attached three screenshots of our ui and Snoop:
- binding_working shows the control and its SearchText binding in the default state.
- binding_working2 shows the control and its SearchText binding after selecting an item by first typing into the AutoCompleteBox and then selecting an item from the dropdown.
- binding_broken shows the control and its SearchText binding in the broken state: Instead of the binding, SearchText now only contains a string.
- The issue occurs in two cases:
1. If I open the module with a preselected item (e.g. by opening a saved document),
2. If I use a separate selection module to select an item (the selection module is displayed by temprarily switching the DataContext to show the selection UI. When a new item is selected, we set the SelectedUnit and then the DataContext is switched back to show the module ui again, see RadAutoCompleteBox_LostBinding.gif)
- If the SelectedItem is not bound, the issue does not seem to occur.
- Forcing the ui to be reloaded (e.g. by switching to a different module and then back) makes the binding come back.
Regards
Simon Müller
Hofmann Fördertechnik GmbH
Hi,
under certain circumstances, RadAutoCompleteBoxes (at least in the "SuggestAppend" mode) have a discrepancy between what is displayed and what is actually selected/in their SearchText property.
Steps to reproduce:
- Execute the attached project
- Focus the AutoCompleteBox on the top left.
- type the number zero (0) (for demo purposes, all items have names that look like 00001, 00002, 00004, ...)
- You should now see the Dropdown opening and the suggestion mechanism beginning to suggest the first item in the list. You should also see that the SearchText property that is bound to ViewModel contains the single zero you just typed. The selected item is still NULL as expected.
- Now, instead of typing anything else, click out of the AutoCompleteBox and focus another control (I added the WatermarkBox on the right side to allow for that)
- This is the point where the discrepancy occurs: The viewmodel still only sees the zero you typed and no item is selected. BUT: the AutoCompleteBox now shows the full item name as if it was selected correctly, see the attached screenshot.
As a user who does not have the controls on the right side to show me what is actually happening under the hood, I have no chance of knowing what is actually selected (and if anything is selected at all). To me it looks like the AutoCompleteBox just selected the first item for me. If this is what I wanted, I would have no reason to think that nothing is actually selected.
Since the ViewModel does not know anything about the additional text that is displayed, I (now as the programmer) have afaik no chance to add a workaround that selects the corresponding item when the control loses focus.
What I think it should look like:
There are two possibilities:
1. As soon as the control loses focus, the suggestion should disappear, leaving me with a single zero in the text box and nothing selected.
2. There could be a second property where I can bind to the full text in the textbox (including the suggestion) so I as the programmer can decide what to do with the suggestion once the control loses focus.
Best regards
Simon Müller
Hofmann Fördertechnik GmbH
PS.: If you click back into the AutoCompleteBox after defocusing it, you can then actually edit the suggestion as if it was text you inserted in the first place. But only after your first key press, the ViewModel is updated to the full string that is displayed in the textbox.
Currently, if you wrap RadAutoCompleteBox in a ScrollViewer (along with some other controls) and enable the vertical scrollbar of the child TextBox control, the scrolling doesn't bubble to the parent ScrollViewer when you reach the beginning (scroll up) or the end (scroll down) of the TextBox scrollbar.
Add an option or change the default behavior and allow the scrolling to bubble to the parent scrollbar. This behavior can be observed in the native TextBox control with an enabled vertical scrollbar.
For the time being, the MouseWheel event can be manually raised:
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (sender is ListBox && !e.Handled)
{
e.Handled = true;
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
var parent = ((Control)sender).Parent as UIElement;
parent.RaiseEvent(eventArg);
}
}
Hello,
Did some reading and didn't see a way to do this but I am wondering with the RadAutoCompleteBox is it possible to select multiple suggestions at the same time?
Looking at https://docs.telerik.com/devtools/wpf/controls/radautocompletebox/overview for example the picture shows "United Kingdom" and "United States". Is there a way for the user to select both "United Kingdom" and "United States" either with a checkbox or a shift-click or some other mechanism?
The use case is as follows: the RadAutoCompleteBox is tied to a search algorithm that can be a bit slow at times and will return many records. Would be handy for the user to just click all the suggestions they want instead of researching each time.