diff --git a/ai/copilot-extension.md b/ai/copilot-extension.md
index a84dcdb4f..93620f4b3 100644
--- a/ai/copilot-extension.md
+++ b/ai/copilot-extension.md
@@ -54,7 +54,7 @@ To use the Telerik MAUI Copilot extension:
The following examples demonstrate useful prompts for the Telerik MAUI extension:
-* "`@telerikmaui` Generate a DataGrid with 5 columns and 500 records. Enable sorting for the firs column and include paging."
+* "`@telerikmaui` Generate a DataGrid with 5 columns and 500 records. Enable sorting for the first column and include paging."
* "`@telerikmaui` Create a Telerik ComboBox with sample data for customers. Enable multiple selection and preselect the first two customers."
* "`@telerikmaui` Show me how to implement a Chart with line series."
* "`@telerikmaui` Generate a CollectionView with grouping and filtering capabilities."
diff --git a/ai/overview.md b/ai/overview.md
index 1c7e03349..b3751d7d6 100644
--- a/ai/overview.md
+++ b/ai/overview.md
@@ -41,7 +41,7 @@ To use the Telerik MAUI AI Coding Assistant, you need:
Consider the following recommendations when working with the AI Coding Assistant:
* Add NuGet packages/referenced assemblies for the Telerik UI for WPF product.
-* Set the .sln as a context.
+* Set the `.sln` as a context.
* When switching between tasks and files, start a new session in a new chat window to avoid polluting the context with irrelevant or outdated information.
* At the time of publishing, Claude Sonnet 4 produces optimal results.
@@ -49,17 +49,20 @@ Consider the following recommendations when working with the AI Coding Assistant
Access to the AI Coding Assistant depends on your [Telerik license type](https://www.telerik.com/purchase/faq/licensing-purchasing):
-Subscription License:
+### Subscription License
+
* A Subscription is the primary license that grants full access to the AI Coding Assistant.
* Includes a virtually unlimited number of requests, with a fair use threshold of 300 requests per day.
* Best for ongoing and high-volume usage.
-Perpetual License (Limited Access):
+### Perpetual License (Limited Access)
+
* Perpetual licenses include limited access of 50 requests per year.
* Intended for exploring and trying out the AI Coding Assistant.
* For continued or higher-volume access, upgrade to a Subscription license.
-Trial License:
+### Trial License
+
* Trial licenses include 300 requests per trial per year.
* Reactivating the same trial for a new release does not grant additional requests.
* Designed for evaluating the feature before purchasing.
diff --git a/ai/prompt-library.md b/ai/prompt-library.md
index 098a5ed98..cb7d79382 100644
--- a/ai/prompt-library.md
+++ b/ai/prompt-library.md
@@ -37,7 +37,7 @@ This section provides examples of general questions related to Telerik UI for MA
-
Setup New Project and Add DataGrid control
+
Set Up New Project and Add DataGrid control
Component Overview
diff --git a/controls/tabview/styling/header-itemstyle-selector.md b/controls/tabview/styling/header-itemstyle-selector.md
index 51ac2005b..4494e444a 100644
--- a/controls/tabview/styling/header-itemstyle-selector.md
+++ b/controls/tabview/styling/header-itemstyle-selector.md
@@ -11,7 +11,7 @@ position: 3
The TabView control provides the built-in `HeaderItemStyleSelector` property, which allows you to apply different styles to each TabView header item. The target type of the style must be `TabViewHeaderItem`.
-The following example shows how to apply styles to the TabView heare using a style selector.
+The following example shows how to apply styles to the TabView by using a style selector.
**1.** Define the TabView control:
diff --git a/controls/treedatagrid/methods.md b/controls/treedatagrid/methods.md
index ba9685e2d..bc83a8b7c 100644
--- a/controls/treedatagrid/methods.md
+++ b/controls/treedatagrid/methods.md
@@ -14,7 +14,7 @@ The [Telerik UI for .NET MAUI TreeDataGrid]({%slug datagrid-overview%}) exposes
* `Expand`(`object item`)—Expands the children of the item.
* `Collapse`(`object item`)—Collapses the children of the item.
-Use the `IsExpanded` (`bool`) property to get a value whether the item is currently expanded (has its children visible).
+Use the `IsExpanded` (`object item`) method to get a value whether the item is currently expanded (has its children visible). Returns `true` if the item is expanded, otherwise `false`.
## Additional Resources
diff --git a/knowledge-base/datagrid-sorting-grouping-descending-order.md b/knowledge-base/datagrid-sorting-grouping-descending-order.md
index d595e6995..97a921a31 100644
--- a/knowledge-base/datagrid-sorting-grouping-descending-order.md
+++ b/knowledge-base/datagrid-sorting-grouping-descending-order.md
@@ -17,20 +17,20 @@ res_type: kb
## Description
-I need when the user groups the DataGrid through the U, the groups to appear in descending order. Currently, the items are sorted by `FirstContactDate` in descending order, but when grouped, the grouping defaults to ascending order. The goal is to allow users to see the latest entries grouped by `FirstContactDate` in descending order.
+When the user groups the DataGrid through the UI, I need the groups to appear in descending order. Currently, the items are sorted by `FirstContactDate` in descending order, but when grouped, the grouping defaults to ascending order. The goal is to allow users to see the latest entries grouped by `FirstContactDate` in descending order.
This knowledge base article also answers the following questions:
- How to sort and group items in descending order in DataGrid?
- How to set group descriptors to descending order in Telerik DataGrid for .NET MAUI?
-- How to change group descriptor order dynamically during grouping?
+- How to change the group descriptor order dynamically during grouping?
## Solution
-To achieve sorting and grouping in descending order, follow one of the approaches below:
+To achieve sorting and grouping in descending order, follow one of the approaches below.
### Option 1: Set Sort and Group Descriptors Explicitly
-Define both `SortDescriptors` and `GroupDescriptors` with the desired `SortOrder` in the XAML configuration:
+Define both `SortDescriptors` and `GroupDescriptors` with the desired `SortOrder` in the XAML configuration.
```xaml
@@ -44,7 +44,7 @@ Define both `SortDescriptors` and `GroupDescriptors` with the desired `SortOrder
### Option 2: Change Group Sort Order at Runtime
-Use the `GroupDescriptors.CollectionChanged` event to dynamically update the `SortOrder` of the group descriptor when a column is grouped. Example:
+Use the `GroupDescriptors.CollectionChanged` event to dynamically update the `SortOrder` of the group descriptor when a column is grouped. For example:
```csharp
public partial class MainPage : ContentPage
diff --git a/knowledge-base/display-showmoretemplate-hide-tokentemplate-combobox-net-maui.md b/knowledge-base/display-showmoretemplate-hide-tokentemplate-combobox-net-maui.md
index 909a8947f..5ce6fcfc0 100644
--- a/knowledge-base/display-showmoretemplate-hide-tokentemplate-combobox-net-maui.md
+++ b/knowledge-base/display-showmoretemplate-hide-tokentemplate-combobox-net-maui.md
@@ -10,7 +10,7 @@ res_type: kb
| Version | Product | Author |
| --- | --- | ---- |
-| 6.7.0 | Telerik UI for .NET MAUI ComboBox | [Dobrinka Yordanova](https://www.telerik.com/blogs/author/dobrinka-yordanova)|
+| 11.1.0 | Telerik UI for .NET MAUI ComboBox | [Dobrinka Yordanova](https://www.telerik.com/blogs/author/dobrinka-yordanova)|
## Description
@@ -21,53 +21,106 @@ I want to customize the ComboBox control in .NET MAUI to display only the ShowMo
To achieve the desired scenario of hiding the tokens and only displaying the ShowMoreTemplate in the ComboBox control, you can follow these steps:
-**1.** Create a custom control.
+**1.** Create a custom control `MyComboBox` that inherits from the `RadComboBox`.
-**2.** Add a label to display the selected items count.
+```C#
+public class MyComboBox : RadComboBox
+{
+
+}
+```
-**3.** Update the label's text inside the `SelectionChanged` event.
+**2.** Add a label to display the selected items count and update the label's text inside the `MyComboBox.SelectionChanged` event.
```C#
public class MyComboBox : RadComboBox
{
private ContentView selectionToken;
private RadWrapLayout layout;
+ private bool isInitialized;
+
public MyComboBox()
{
- this.layout = this.Content as RadWrapLayout;
- this.SelectionChanged += MyComboBox_SelectionChanged;
+ this.Loaded += (_, _) => this.Initialize();
+ }
+
+ protected override void OnHandlerChanged()
+ {
+ base.OnHandlerChanged();
+ this.Dispatcher.Dispatch(this.Initialize);
}
- private void MyComboBox_SelectionChanged(object? sender, ComboBoxSelectionChangedEventArgs e)
+ private void Initialize()
{
- if (this.SelectedItems.Count > 0)
+ if (this.isInitialized)
{
- if (this.layout.Contains(this.selectionToken))
- {
- return;
- }
+ return;
+ }
+ this.layout = FindDescendant(this);
+ if (this.layout == null)
+ {
+ return;
+ }
+
+ this.SelectionChanged += this.MyComboBox_SelectionChanged;
+ this.isInitialized = true;
+ }
+
+ private void MyComboBox_SelectionChanged(object sender, ComboBoxSelectionChangedEventArgs e)
+ {
+ if (this.layout == null)
+ {
+ return;
+ }
+
+ int count = SelectedItems.Count;
+ if (count > 0)
+ {
if (this.selectionToken == null)
{
- this.selectionToken = new ContentView();
- var label = new Label(); //create a new label for every newly added token
- label.SetBinding(Label.TextProperty, new Binding()
+ var label = new Label
+ {
+ VerticalOptions = LayoutOptions.Center,
+ HorizontalOptions = LayoutOptions.Center
+ };
+ label.SetBinding(Label.TextProperty, new Binding("Count")
{
- Source = this.SelectedItems,
- Path = "Count"
+ Source = SelectedItems,
+ StringFormat = "{0} selected"
});
- this.selectionToken.Content = label; //set label text to selected items' count
+
+ this.selectionToken = new ContentView { Content = label };
}
- this.layout.Insert(0, this.selectionToken);
+ if (!this.layout.Contains(this.selectionToken))
+ {
+ this.layout.Insert(0, this.selectionToken);
+ }
+ }
+ else if (this.layout.Contains(this.selectionToken))
+ {
+ this.layout.Remove(this.selectionToken);
}
- else
+ }
+
+ private static T FindDescendant(Element parent) where T : Element
+ {
+ if (parent is T match) return match;
+
+ if (parent is IElementController controller)
{
- if (layout.Contains(this.selectionToken))
+ foreach (var child in controller.LogicalChildren)
{
- layout.Remove(this.selectionToken);
+ var result = FindDescendant(child);
+ if (result != null)
+ {
+ return result;
+ }
}
}
+
+ return null!;
}
}
```
@@ -75,22 +128,32 @@ public class MyComboBox : RadComboBox
**4.** Override the default `TokenTemplate` to hide the tokens.
```xaml
-
-
+
+
+
+
+
+
+
+
+
+
+
```
diff --git a/knowledge-base/dynamically-update-tabview-headertext-based-on-selection.md b/knowledge-base/dynamically-update-tabview-headertext-based-on-selection.md
index 4c7c20a7e..9428d46c4 100644
--- a/knowledge-base/dynamically-update-tabview-headertext-based-on-selection.md
+++ b/knowledge-base/dynamically-update-tabview-headertext-based-on-selection.md
@@ -22,13 +22,13 @@ I need to change the `HeaderText` of the TabView items when they are selected. F
This knowledge base article also answers the following questions:
- How can I change the header text of TabView dynamically?
- How to update TabView `HeaderText` based on selection in .NET MAUI?
-- How to use ``SelectionChanged` event in TabView to modify `HeaderText`?
+- How to use the `SelectionChanged` event in TabView to modify `HeaderText`?
## Solution
-Use the [SelectionChanged](https://docs.telerik.com/devtools/maui/controls/tabview/selection#events) event of the TabView to dynamically update the header text based on the selected tab item.
+Use the [`SelectionChanged`](https://docs.telerik.com/devtools/maui/controls/tabview/selection#events) event of the TabView to dynamically update the header text based on the selected tab item.
-1. Subscribe to the `SelectionChanged` event in the TabView.
+**1.** Subscribe to the `SelectionChanged` event in the TabView.
```xaml
```
-2. Implement a method to update the `HeaderText` dynamically based on the selected index. Handle the `SelectionChanged` event in the code-behind:
+**2.** Implement a method to update the `HeaderText` dynamically based on the selected index. Handle the `SelectionChanged` event in the code-behind.
```csharp
private void TabView_SelectionChanged(object sender, EventArgs e)
diff --git a/knowledge-base/speechtotextbutton-language-support.md b/knowledge-base/speechtotextbutton-language-support.md
index 958ec8e56..8b32ea76c 100644
--- a/knowledge-base/speechtotextbutton-language-support.md
+++ b/knowledge-base/speechtotextbutton-language-support.md
@@ -20,7 +20,7 @@ This article explains how to check the supported languages for the SpeechToTextB
## Solution
-Here is an example of how to check the supported languages for the SpeechToTextButton in .NET MAUI. For the demo, we will use:
+Here is an example of how to check the supported languages for the SpeechToTextButton in .NET MAUI. For the demo, use:
* An Editor for displaying the recognized text.
* An Entry for setting the language.
* A Label for displaying whether the language is supported or not.