Skip to content
Introducing AI Conversations: Natural Language Interaction for Your Apps! Learn More

ChatView | API Reference

PropertyMAUI TypeBlazor TypeDefaultDescription
MessagesIList<ChatMessage>?IList<ChatMessage>?nullMessage collection. On MAUI, supports INotifyCollectionChanged for reactive updates.
ParticipantsIList<ChatParticipant>?IList<ChatParticipant>?nullParticipant info for avatar, name, and color lookup
IsMultiPersonboolboolfalseShow avatars and display names for other participants
ShowAvatarsInSingleChatboolboolfalseShow avatars even when IsMultiPerson = false
PropertyMAUI TypeBlazor TypeDefaultDescription
MyBubbleColorColorstring#DCF8C6Local user bubble background
MyTextColorColorstringBlackLocal user text color
OtherBubbleColorColorstringWhiteDefault other-user bubble background
OtherTextColorColorstringBlackOther-user text color
ChatBackgroundColorColor?string?nullBackground color behind the messages area
PropertyMAUI TypeBlazor TypeDefaultDescription
BubbleFontSizedouble15Font size for message bubble text (MAUI only)
BubbleFontFamilystring?nullFont family for message bubble text (MAUI only)
TimestampFontSizedouble11Font size for timestamp labels (MAUI only)
BubbleCornerRadiusdouble18Corner radius for message bubbles. The “tail” corner on the last message in a group remains at 4. (MAUI only)
PropertyMAUI TypeBlazor TypeDefaultDescription
PlaceholderTextstringstring"Type a message..."Input field placeholder text
SendButtonTextstringstring"Send"Send button label
SendButtonBackgroundColorColor#007AFFSend button background color (MAUI only)
SendButtonTextColorColorWhiteSend button text color (MAUI only)
InputBarBackgroundColorColor#F5F5F5Input bar background color (MAUI only)
InputBarBorderColorColor#E0E0E0Input bar top separator/border color (MAUI only)
IsInputBarVisibleboolbooltrueShow/hide the entire input bar
EntryTextstring""Get/set the current input text (MAUI only)
PropertyMAUI TypeBlazor TypeDefaultDescription
ShowTypingIndicatorboolbooltrueEnable/disable typing indicator rendering
TypingParticipantsIList<ChatParticipant>?IList<ChatParticipant>?nullCurrently typing participants
PropertyMAUI TypeBlazor TypeDefaultDescription
ScrollToFirstUnreadboolboolfalseScroll to first unread on load (instead of end)
FirstUnreadMessageIdstring?string?nullID of the message to scroll to
PropertyTypeDefaultDescription
ToolItemsIList<FabMenuItem>?nullItems in the tools FAB menu
ToolsIconImageSource?nullIcon for the tools button
ToolsTextstring?nullText label for the tools button
ToolsFabBackgroundColorColor#007AFFTools button background color
PropertyTypeDefaultDescription
BubbleToolItemsIList<FabMenuItem>?nullDefault per-message tool actions
BubbleToolItemTappedCommandICommandnullCentralized handler (param: ChatBubbleToolContext)
MessageTappedCommandICommandnullFires when a bubble is tapped (param: ChatMessage)
PropertyTypeDefaultDescription
MessageTemplateDataTemplate?nullSingle template applied to all messages
MessageTemplateSelectorDataTemplateSelector?nullPer-message-type template routing
PropertyTypeDefaultDescription
UseFeedbackbooltrueEnable haptic/audio feedback on interactions
MAUI (ICommand)Blazor (EventCallback)ParameterDescription
SendCommandEventCallback<string>Trimmed text stringUser taps Send or presses Enter
AttachImageCommandEventCallbackUser taps the attach (+) button
LoadMoreCommandEventCallbackUser scrolls near top (MAUI: auto, Blazor: button)
MessageTappedCommandEventCallback<ChatMessage>ChatMessageUser taps a message bubble
BubbleToolItemTappedCommandChatBubbleToolContextUser taps a bubble tool item (MAUI only)
EventEventArgs TypeDescription
MessageTappedChatMessageFired when a message bubble is tapped
BubbleToolItemTappedChatBubbleToolContextFired when a bubble tool is tapped
MethodSignatureDescription
ScrollToEndvoid ScrollToEnd(bool animate = false)Scroll to the latest message
ScrollToMessagevoid ScrollToMessage(string messageId, bool animate = true)Scroll to a specific message by ID
SubmitEntryvoid SubmitEntry()Programmatically submit current input text
PropertyTypeDefaultDescription
IdstringAuto GUIDUnique message identifier
Textstring?nullMessage text content
ImageUrlstring?nullImage URL (mutually exclusive with text rendering)
SenderIdstring""ID matching a ChatParticipant.Id
TimestampDateTimeOffsetDateTimeOffset.NowWhen the message was sent
IsFromMeboolfalseWhether this is from the local user (right-aligned)
Identifierstring?nullUser-defined identifier for server correlation
DateSentDateTimeOffset?nullSend confirmation timestamp — null renders at 50% opacity for IsFromMe messages (supports offline/background send)
AcknowledgementsList<Acknowledgement>?nullEmoji reaction badges
ToolItemsIList<FabMenuItem>?nullPer-message tool overrides (MAUI only)
PropertyMAUI TypeBlazor TypeDescription
IdstringstringUnique ID (matches ChatMessage.SenderId)
DisplayNamestringstringName shown above bubbles in multi-person mode
AvatarImageSource?Avatar image (MAUI only)
AvatarUrlstring?Avatar URL (Blazor only)
BubbleColorColor?string?Per-participant bubble color override
PropertyTypeDescription
Glyphstring?Emoji or character (e.g., ”👍”, “❤️”)
UserIdstringID of the user who reacted
TimestampDateTimeWhen the reaction was added
PropertyTypeDescription
MessageChatMessageThe message the tool was invoked on
ItemFabMenuItemThe specific tool item that was tapped

Base class for input bar tools that need ChatView access. Inherit this instead of manually implementing IChatEntryTool on a FabMenuItem.

public abstract class ChatEntryTool : FabMenuItem, IChatEntryTool
{
protected ChatView? ChatView { get; private set; }
// Attach/Detach called automatically by ChatView when added to ToolItems
}

Built-in tools using this base: SpeechToTextTool

Base class for self-contained bubble tools that act on a message. The Message property is automatically populated when the bubble tool menu opens.

public abstract class ChatBubbleTool : FabMenuItem
{
protected ChatMessage? Message { get; } // Auto-populated via CommandParameter
}

Built-in tools using this base: CopyBubbleTool, TextToSpeechBubbleTool

The underlying interface that ChatEntryTool implements. You can implement this directly if you cannot inherit from ChatEntryTool:

public interface IChatEntryTool
{
void Attach(ChatView chatView);
void Detach();
}

Called automatically when the tool is added to ToolItems.

When UseFeedback = true, these events are fired for haptic/audio feedback:

Event NameTriggerArgs
MessageSentUser sends a messageChatMessage
MessageReceivedNew incoming messageChatMessage
MessageTappedBubble tappedChatMessage
AttachImageAttach button tapped
ToolItemTappedInput tool FAB item tappedFabMenuItem
BubbleToolItemTappedBubble tool item tappedChatBubbleToolContext

Static utility methods used by both platforms:

MethodDescription
IsNewGroup(current, previous)Returns true if sender changes or timestamp minute differs
FormatTimestamp(timestamp)Returns "h:mm tt" (today) or "MMM d, h:mm tt" (other days)
GetInitials(displayName)Returns first+last initials, single initial, or ”?”