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
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.
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
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
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>
Add a possibility to set minimum populate delay to the control. It would be useful if a property like MinimumPopulateDelay is available to be set which would cause the populating of items to be delayed. Such feature would be helpful for cases when making requests to web server etc.
As a workaround the Foreground property of the AutoCompleteBox can be set to Black.
The control is focused after the SelectionChanged event is triggered when selection is made with the mouse
Initially the events is triggered correctly and after switching between TabItems the event is not longer triggered. The issue also is reproducible inside RadDocking control.
No items are returned by the AsyncFilteringBehavior if the ItemsSource contains objects of a nested class. For example the ItemsSource is bound to a "List<Item>" collection and the "Item" class is declared inside a different class (nested classes). Available in LIB version 2016.1.208, it will be also available in the 2016 Q1 SP1 Release.
The filtering mechanism is not triggered if the drop down of the control is opened and its ItemsSource is changed
Available in LIB version 2017.1.213 , it will be also available in the R1 2017 SP1 Release.
Exposed the HandleKeyDown method of RadAutoCompleteBox. In order to navigate to the next control when Tab key is pressed, the method should be overridden as shown below: public class CustomAutoCompleteBox : RadAutoCompleteBox { protected override bool HandleKeyDown(Key systemKey) { return base.HandleKeyDown(systemKey) && systemKey != Key.Tab; } } Available in LIB version 2016.2.525, it will be also available in the 2016 R2 SP1 release.