<Page x:Class="XFEToolBox.Client.Views.Pages.ChatPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:controls="clr-namespace:XFEToolBox.WpfCore.Controls;assembly=XFEToolBox.WpfCore"
      xmlns:chat="clr-namespace:XFEToolBox.Client.Models.Chat"
      Background="Transparent" Title="聊天" Loaded="Page_Loaded" SizeChanged="Page_SizeChanged">
    <Page.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>

        <Style x:Key="ChatPaneStyle" TargetType="Border">
            <Setter Property="Background" Value="{DynamicResource ToolSurfaceBrush}"/>
            <Setter Property="BorderBrush" Value="{DynamicResource ToolControlBorderBrush}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="CornerRadius" Value="15"/>
        </Style>
        <Style x:Key="SectionButtonStyle" TargetType="RadioButton">
            <Setter Property="Height" Value="42"/>
            <Setter Property="Margin" Value="0,0,0,6"/>
            <Setter Property="Padding" Value="11,0"/>
            <Setter Property="Foreground" Value="{DynamicResource ToolTextSecondaryBrush}"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="Cursor" Value="Hand"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="RadioButton">
                        <Border x:Name="Surface" Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" CornerRadius="11">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Center"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Surface" Property="Background" Value="{DynamicResource ToolControlHoverBrush}"/>
                            </Trigger>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter TargetName="Surface" Property="Background" Value="{DynamicResource ToolAccentSelectedBrush}"/>
                                <Setter TargetName="Surface" Property="BorderBrush" Value="{DynamicResource MainColor}"/>
                                <Setter Property="Foreground" Value="{DynamicResource ToolTextPrimaryBrush}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="CompactSectionButtonStyle" TargetType="RadioButton" BasedOn="{StaticResource SectionButtonStyle}">
            <Setter Property="Height" Value="32"/>
            <Setter Property="MinWidth" Value="50"/>
            <Setter Property="Margin" Value="0,0,4,0"/>
            <Setter Property="Padding" Value="8,0"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
        <Style x:Key="ChatListItemStyle" TargetType="ListBoxItem" BasedOn="{StaticResource ToolBoxListBoxItemStyle}">
            <Setter Property="Padding" Value="10,8"/>
            <Setter Property="MinHeight" Value="54"/>
            <Setter Property="Margin" Value="1,1,1,4"/>
        </Style>
        <Style x:Key="MessageListItemStyle" TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Margin" Value="0,3"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <ContentPresenter HorizontalAlignment="Stretch"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="HeadingStyle" TargetType="TextBlock">
            <Setter Property="Foreground" Value="{DynamicResource ToolTextPrimaryBrush}"/>
            <Setter Property="FontWeight" Value="SemiBold"/>
            <Setter Property="FontSize" Value="14"/>
        </Style>
        <Style x:Key="HintStyle" TargetType="TextBlock">
            <Setter Property="Foreground" Value="{DynamicResource ToolTextSecondaryBrush}"/>
            <Setter Property="FontSize" Value="9.5"/>
            <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
        </Style>
        <Style x:Key="InlineButtonStyle" TargetType="Button" BasedOn="{StaticResource ToolBoxButtonStyle}">
            <Setter Property="MinWidth" Value="50"/>
            <Setter Property="Height" Value="28"/>
            <Setter Property="Padding" Value="8,0"/>
            <Setter Property="FontSize" Value="9.5"/>
            <Setter Property="controls:ButtonAssist.CornerRadius" Value="9"/>
        </Style>
        <Style x:Key="IconButtonStyle" TargetType="Button" BasedOn="{StaticResource ToolBoxButtonStyle}">
            <Setter Property="Width" Value="34"/>
            <Setter Property="Height" Value="34"/>
            <Setter Property="MinWidth" Value="34"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="controls:ButtonAssist.CornerRadius" Value="10"/>
        </Style>

        <DataTemplate x:Key="ConversationTemplate">
            <Grid>
                <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                <controls:PersonPicture Width="32" Height="32" FontSize="11" DisplayName="{Binding Initials}"/>
                <StackPanel Grid.Column="1" Margin="8,0,4,0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding Title}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11" TextTrimming="CharacterEllipsis"/>
                    <TextBlock Text="{Binding Subtitle}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                </StackPanel>
                <StackPanel Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right">
                    <TextBlock Text="{Binding TimeText}" Foreground="{DynamicResource ToolTextDisabledBrush}" FontSize="8" HorizontalAlignment="Right"/>
                    <TextBlock Text="{Binding MutedText}" Foreground="{DynamicResource ToolTextDisabledBrush}" FontSize="8" HorizontalAlignment="Right" Margin="0,3,0,0"
                               Visibility="{Binding IsMuted, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                    <Border Margin="0,4,0,0" Padding="5,1" CornerRadius="7" Background="{DynamicResource MainColor}"
                            Visibility="{Binding HasUnread, Converter={StaticResource BooleanToVisibilityConverter}}">
                        <TextBlock Text="{Binding UnreadText}" Foreground="White" FontSize="8"/>
                    </Border>
                </StackPanel>
            </Grid>
        </DataTemplate>

        <DataTemplate x:Key="GroupTemplate">
            <Grid>
                <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                <Border Width="32" Height="32" CornerRadius="10" Background="{DynamicResource ToolAccentSoftBrush}">
                    <TextBlock Text="#" Foreground="{DynamicResource MainColor}" FontWeight="Bold" FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <StackPanel Grid.Column="1" Margin="8,0,5,0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11" TextTrimming="CharacterEllipsis"/>
                    <TextBlock Style="{StaticResource HintStyle}" Margin="0,3,0,0">
                        <Run Text="{Binding GroupNumberText, Mode=OneWay}"/><Run Text=" · "/><Run Text="{Binding MemberText, Mode=OneWay}"/>
                    </TextBlock>
                </StackPanel>
                <Button Grid.Column="2" Content="{Binding JoinActionText}" Style="{StaticResource InlineButtonStyle}"
                        Command="{Binding DataContext.JoinOrOpenGroupCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
            </Grid>
        </DataTemplate>

        <DataTemplate x:Key="FriendTemplate">
            <Grid>
                <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                <controls:PersonPicture Width="32" Height="32" FontSize="11" DisplayName="{Binding Name}"/>
                <StackPanel Grid.Column="1" Margin="8,0,5,0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11" TextTrimming="CharacterEllipsis"/>
                    <TextBlock Text="{Binding AccountText}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                </StackPanel>
                <Button Grid.Column="2" Content="聊天" Style="{StaticResource InlineButtonStyle}"
                        Command="{Binding DataContext.OpenFriendConversationCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
            </Grid>
        </DataTemplate>

        <DataTemplate x:Key="UserSearchTemplate">
            <Grid>
                <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                <controls:PersonPicture Width="32" Height="32" FontSize="11" DisplayName="{Binding Name}"/>
                <StackPanel Grid.Column="1" Margin="8,0,5,0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11" TextTrimming="CharacterEllipsis"/>
                    <TextBlock Text="{Binding AccountText}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                </StackPanel>
                <Button Grid.Column="2" Content="添加" Style="{StaticResource InlineButtonStyle}" controls:ButtonAssist.IsPrimary="True"
                        Command="{Binding DataContext.SendFriendRequestCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
            </Grid>
        </DataTemplate>

        <DataTemplate x:Key="FriendRequestTemplate">
            <StackPanel>
                <Grid>
                    <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                    <controls:PersonPicture Width="32" Height="32" FontSize="11" DisplayName="{Binding Name}"/>
                    <StackPanel Grid.Column="1" Margin="8,0,5,0" VerticalAlignment="Center">
                        <TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11"/>
                        <TextBlock Text="{Binding Message}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                    </StackPanel>
                    <TextBlock Grid.Column="2" Text="{Binding StatusText}" Foreground="{DynamicResource MainColor}" FontSize="8.5" VerticalAlignment="Center"/>
                </Grid>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,7,0,0"
                            Visibility="{Binding CanRespond, Converter={StaticResource BooleanToVisibilityConverter}}">
                    <Button Content="拒绝" Style="{StaticResource InlineButtonStyle}" Margin="0,0,6,0"
                            Command="{Binding DataContext.RejectFriendRequestCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
                    <Button Content="同意" Style="{StaticResource InlineButtonStyle}" controls:ButtonAssist.IsPrimary="True"
                            Command="{Binding DataContext.AcceptFriendRequestCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
                </StackPanel>
            </StackPanel>
        </DataTemplate>

        <DataTemplate x:Key="InvitationTemplate">
            <StackPanel>
                <Grid>
                    <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                    <Border Width="32" Height="32" CornerRadius="10" Background="{DynamicResource ToolAccentSoftBrush}"><TextBlock Text="#" Foreground="{DynamicResource MainColor}" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border>
                    <StackPanel Grid.Column="1" Margin="8,0,5,0">
                        <TextBlock Text="{Binding GroupName}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11"/>
                        <TextBlock Text="{Binding InviterText}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                    </StackPanel>
                    <TextBlock Grid.Column="2" Text="{Binding StatusText}" Foreground="{DynamicResource MainColor}" FontSize="8.5" VerticalAlignment="Center"/>
                </Grid>
                <TextBlock Text="{Binding Message}" Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="9.5" Margin="40,6,0,0" TextWrapping="Wrap"/>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,7,0,0"
                            Visibility="{Binding CanRespond, Converter={StaticResource BooleanToVisibilityConverter}}">
                    <Button Content="拒绝" Style="{StaticResource InlineButtonStyle}" Margin="0,0,6,0"
                            Command="{Binding DataContext.RejectGroupInvitationCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
                    <Button Content="加入" Style="{StaticResource InlineButtonStyle}" controls:ButtonAssist.IsPrimary="True"
                            Command="{Binding DataContext.AcceptGroupInvitationCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
                </StackPanel>
            </StackPanel>
        </DataTemplate>

        <DataTemplate x:Key="MessageTemplate">
            <StackPanel x:Name="MessageFlow" HorizontalAlignment="Left" MaxWidth="470">
                <TextBlock x:Name="SenderText" Text="{Binding SenderName}" Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="9" Margin="5,0,5,3"/>
                <Border x:Name="Bubble" Padding="11,8" Background="{DynamicResource ToolControlBackgroundBrush}"
                        BorderBrush="{DynamicResource ToolControlBorderBrush}" BorderThickness="1" CornerRadius="12">
                    <StackPanel>
                        <TextBlock Text="{Binding Text}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="11" TextWrapping="Wrap"
                                   Visibility="{Binding HasText, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                        <Border Margin="0,3,0,0" Padding="10" CornerRadius="10" Background="{DynamicResource ToolSurfaceBrush}"
                                BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="1"
                                Visibility="{Binding HasAttachment, Converter={StaticResource BooleanToVisibilityConverter}}">
                            <Grid>
                                <Grid.ColumnDefinitions><ColumnDefinition Width="35"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                <Border Width="30" Height="30" CornerRadius="9" Background="{DynamicResource ToolAccentSoftBrush}">
                                    <TextBlock Text="↧" Foreground="{DynamicResource MainColor}" FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Border>
                                <StackPanel Grid.Column="1" Margin="7,0,7,0" VerticalAlignment="Center">
                                    <TextBlock Text="{Binding AttachmentTitle}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="10" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/>
                                    <TextBlock Style="{StaticResource HintStyle}" Margin="0,2,0,0"><Run Text="{Binding AttachmentKindText, Mode=OneWay}"/><Run Text=" · "/><Run Text="{Binding AttachmentSizeText, Mode=OneWay}"/></TextBlock>
                                </StackPanel>
                                <Button Grid.Column="2" Content="下载" Style="{StaticResource InlineButtonStyle}" Tag="{Binding Attachment}" Click="DownloadAttachment_Click"/>
                            </Grid>
                        </Border>
                        <Border Margin="0,3,0,0" Padding="12" CornerRadius="11" Background="{DynamicResource ToolAccentSoftBrush}"
                                BorderBrush="{DynamicResource MainColor}" BorderThickness="1"
                                Visibility="{Binding IsGroupInvitation, Converter={StaticResource BooleanToVisibilityConverter}}">
                            <StackPanel>
                                <TextBlock Text="群邀请" Foreground="{DynamicResource MainColor}" FontSize="9" FontWeight="SemiBold"/>
                                <TextBlock Text="{Binding InvitationTitle}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="12" FontWeight="SemiBold" Margin="0,5,0,0"/>
                                <TextBlock Text="{Binding InvitationSubtitle}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                                <Grid Margin="0,9,0,0">
                                    <TextBlock Text="{Binding InvitationStatusText}" Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="9" VerticalAlignment="Center"/>
                                    <Button Content="接受邀请" HorizontalAlignment="Right" Style="{StaticResource InlineButtonStyle}" controls:ButtonAssist.IsPrimary="True"
                                            Visibility="{Binding CanRespondToInvitation, Converter={StaticResource BooleanToVisibilityConverter}}"
                                            Command="{Binding DataContext.AcceptMessageInvitationCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}"/>
                                </Grid>
                            </StackPanel>
                        </Border>
                    </StackPanel>
                </Border>
                <TextBlock Text="{Binding TimeText}" Foreground="{DynamicResource ToolTextDisabledBrush}" FontSize="8" Margin="5,3,5,0" HorizontalAlignment="Left"/>
            </StackPanel>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsMine}" Value="True">
                    <Setter TargetName="MessageFlow" Property="HorizontalAlignment" Value="Right"/>
                    <Setter TargetName="SenderText" Property="Text" Value="我"/>
                    <Setter TargetName="SenderText" Property="HorizontalAlignment" Value="Right"/>
                    <Setter TargetName="Bubble" Property="Background" Value="{DynamicResource ToolAccentSelectedBrush}"/>
                    <Setter TargetName="Bubble" Property="BorderBrush" Value="{DynamicResource MainColor}"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </Page.Resources>

    <Grid Margin="10,7,10,10">
        <!-- 登录门禁。 -->
        <Border Style="{StaticResource ChatPaneStyle}" Padding="28" Visibility="{Binding IsLoggedOut, Converter={StaticResource BooleanToVisibilityConverter}}">
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" MaxWidth="390">
                <Border Width="70" Height="70" CornerRadius="23" Background="{DynamicResource ToolAccentSoftBrush}">
                    <TextBlock Text="聊" Foreground="{DynamicResource MainColor}" FontSize="28" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <TextBlock Text="登录后开始聊天" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" Margin="0,18,0,0"/>
                <TextBlock Text="与好友发送消息、加入公开或私密群聊，并在通话中保持联系。聊天数据仅向登录用户开放。"
                           Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="10.5" TextAlignment="Center" TextWrapping="Wrap" Margin="0,9,0,0"/>
                <Button Content="登录 / 注册" controls:ButtonAssist.IsPrimary="True" Width="150" Height="38" Margin="0,20,0,0" Click="OpenLoginButton_Click"/>
            </StackPanel>
        </Border>

        <Grid Visibility="{Binding IsLoggedIn, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>

            <Grid x:Name="WorkspaceGrid">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition x:Name="SectionColumn" Width="0"/>
                    <ColumnDefinition Width="0"/>
                    <ColumnDefinition x:Name="ListColumn" Width="272"/>
                    <ColumnDefinition x:Name="DetailGapColumn" Width="8"/>
                    <ColumnDefinition x:Name="DetailColumn" Width="*"/>
                </Grid.ColumnDefinitions>

                <!-- 大屏功能栏。 -->
                <Border x:Name="SectionPane" Style="{StaticResource ChatPaneStyle}" Padding="10" Visibility="Collapsed">
                    <Grid>
                        <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                        <StackPanel Margin="5,4,5,14">
                            <TextBlock Text="聊天" Style="{StaticResource HeadingStyle}" FontSize="17"/>
                            <TextBlock Text="消息与联系人" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                        </StackPanel>
                        <StackPanel Grid.Row="1">
                            <RadioButton Style="{StaticResource SectionButtonStyle}" IsChecked="{Binding IsConversationSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Conversations}"><TextBlock><Run Text="◉  "/><Run Text="会话"/></TextBlock></RadioButton>
                            <RadioButton Style="{StaticResource SectionButtonStyle}" IsChecked="{Binding IsLobbySection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Lobby}"><TextBlock><Run Text="⌂  "/><Run Text="大厅"/></TextBlock></RadioButton>
                            <RadioButton Style="{StaticResource SectionButtonStyle}" IsChecked="{Binding IsFriendsSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Friends}"><TextBlock><Run Text="♡  "/><Run Text="好友"/></TextBlock></RadioButton>
                            <RadioButton Style="{StaticResource SectionButtonStyle}" IsChecked="{Binding IsGroupsSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Groups}"><TextBlock><Run Text="#  "/><Run Text="群聊"/></TextBlock></RadioButton>
                        </StackPanel>
                        <Button Grid.Row="2" Content="全部刷新" Height="32" Command="{Binding RefreshAllCommand}"/>
                    </Grid>
                </Border>

                <!-- 中间列表栏。 -->
                <Border x:Name="ListPane" Grid.Column="2" Style="{StaticResource ChatPaneStyle}" Padding="8"
                        Visibility="{Binding ShowListPane, Converter={StaticResource BooleanToVisibilityConverter}}">
                    <Grid>
                        <Grid.RowDefinitions><RowDefinition x:Name="CompactTabsRow" Height="0"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                        <StackPanel x:Name="CompactTabs" Orientation="Horizontal" Visibility="Collapsed" Margin="0,0,0,7">
                            <RadioButton Content="会话" Style="{StaticResource CompactSectionButtonStyle}" IsChecked="{Binding IsConversationSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Conversations}"/>
                            <RadioButton Content="大厅" Style="{StaticResource CompactSectionButtonStyle}" IsChecked="{Binding IsLobbySection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Lobby}"/>
                            <RadioButton Content="好友" Style="{StaticResource CompactSectionButtonStyle}" IsChecked="{Binding IsFriendsSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Friends}"/>
                            <RadioButton Content="群聊" Style="{StaticResource CompactSectionButtonStyle}" IsChecked="{Binding IsGroupsSection, Mode=OneWay}" Command="{Binding SelectSectionCommand}" CommandParameter="{x:Static chat:ChatSection.Groups}"/>
                        </StackPanel>

                        <Grid Grid.Row="1">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <Grid Margin="4,3,4,8">
                                <StackPanel><TextBlock Text="聊天" Style="{StaticResource HeadingStyle}"/><TextBlock Text="好友与群聊统一按最新消息排序" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel>
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                                    <Button Content="人" Style="{StaticResource IconButtonStyle}" Command="{Binding OpenContactManagementDialogCommand}" ToolTip="好友申请与群邀请"/>
                                    <Button Content="＋" Style="{StaticResource IconButtonStyle}" Margin="5,0,0,0" Command="{Binding OpenCreateGroupDialogCommand}" ToolTip="创建群聊"/>
                                    <Button Content="↻" Style="{StaticResource IconButtonStyle}" Margin="5,0,0,0" Command="{Binding RefreshAllCommand}" ToolTip="刷新"/>
                                </StackPanel>
                            </Grid>
                            <Button Grid.Row="1" Height="54" Margin="1,0,1,7" Padding="10,0" HorizontalContentAlignment="Stretch"
                                    Style="{StaticResource ToolBoxButtonStyle}" controls:ButtonAssist.CornerRadius="11"
                                    Command="{Binding OpenLobbyCommand}">
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="38"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                    <Border Width="32" Height="32" CornerRadius="10" Background="{DynamicResource ToolAccentSoftBrush}">
                                        <TextBlock Text="⌂" Foreground="{DynamicResource MainColor}" FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                    </Border>
                                    <StackPanel Grid.Column="1" Margin="8,0,4,0" VerticalAlignment="Center">
                                        <TextBlock Text="群聊大厅" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontWeight="SemiBold" FontSize="11"/>
                                        <TextBlock Text="公开群推荐与群号查找" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                                    </StackPanel>
                                    <TextBlock Grid.Column="2" Text="›" Foreground="{DynamicResource MainColor}" FontSize="18" VerticalAlignment="Center"/>
                                </Grid>
                            </Button>
                            <ListBox Grid.Row="2" ItemsSource="{Binding NavigationItems}" SelectedItem="{Binding SelectedNavigationItem, Mode=OneWay}"
                                     ItemTemplate="{StaticResource ConversationTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"
                                     SelectionChanged="ConversationList_SelectionChanged"/>
                        </Grid>

                        <Grid Grid.Row="1" Visibility="Collapsed">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <StackPanel Margin="4,3,4,8">
                                <TextBlock Text="公开群大厅" Style="{StaticResource HeadingStyle}"/>
                                <TextBlock Text="发现可直接加入的公开群聊" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                            </StackPanel>
                            <Grid Grid.Row="1" Margin="0,0,0,7">
                                <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                <controls:TextEditor Text="{Binding GroupSearchQuery, UpdateSourceTrigger=PropertyChanged}" Height="35" Padding="9,0" HintText="搜索公开群…" KeyDown="GroupSearchBox_KeyDown"/>
                                <Button Grid.Column="1" Content="搜索" Style="{StaticResource InlineButtonStyle}" Height="35" Margin="6,0,0,0" Command="{Binding RefreshRecommendedGroupsCommand}"/>
                            </Grid>
                            <Grid Grid.Row="2">
                                <Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                                <ListBox ItemsSource="{Binding RecommendedGroups}" ItemTemplate="{StaticResource GroupTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                                <Border Grid.Row="1" Margin="0,7,0,0" Padding="9" Background="{DynamicResource ToolControlBackgroundBrush}" CornerRadius="11" BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="1">
                                    <StackPanel>
                                        <TextBlock Text="通过群号加入" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="10" FontWeight="SemiBold"/>
                                        <Grid Margin="0,6,0,0">
                                            <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                            <controls:TextEditor Text="{Binding GroupNumberQuery, UpdateSourceTrigger=PropertyChanged}" Height="32" Padding="8,0" HintText="输入私密群号" KeyDown="GroupNumberBox_KeyDown"/>
                                            <Button Grid.Column="1" Content="查找" Style="{StaticResource InlineButtonStyle}" Height="32" Margin="5,0,0,0" Command="{Binding LookupGroupCommand}"/>
                                        </Grid>
                                        <ContentControl Margin="0,6,0,0" Content="{Binding LookupGroupResult}" ContentTemplate="{StaticResource GroupTemplate}"
                                                        Visibility="{Binding HasLookupGroupResult, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                                    </StackPanel>
                                </Border>
                            </Grid>
                        </Grid>

                        <Grid Grid.Row="1" Visibility="Collapsed">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <StackPanel Margin="4,3,4,8"><TextBlock Text="好友" Style="{StaticResource HeadingStyle}"/><TextBlock Text="查找用户、处理申请与管理好友" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel>
                            <TabControl Grid.Row="1">
                                <TabItem Header="好友">
                                    <ListBox ItemsSource="{Binding Friends}" ItemTemplate="{StaticResource FriendTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}" ContextMenuOpening="FriendList_ContextMenuOpening">
                                        <ListBox.ContextMenu><ContextMenu><MenuItem Header="删除好友" Click="DeleteFriendMenuItem_Click"/></ContextMenu></ListBox.ContextMenu>
                                    </ListBox>
                                </TabItem>
                                <TabItem Header="申请">
                                    <ListBox ItemsSource="{Binding FriendRequests}" ItemTemplate="{StaticResource FriendRequestTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                                </TabItem>
                                <TabItem Header="添加">
                                    <Grid Margin="2,7,2,2">
                                        <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                                        <Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                            <controls:TextEditor Text="{Binding UserSearchQuery, UpdateSourceTrigger=PropertyChanged}" Height="34" Padding="8,0" HintText="账号或昵称" KeyDown="UserSearchBox_KeyDown"/>
                                            <Button Grid.Column="1" Content="搜索" Style="{StaticResource InlineButtonStyle}" Height="34" Margin="5,0,0,0" Command="{Binding SearchUsersCommand}"/>
                                        </Grid>
                                        <controls:TextEditor Grid.Row="1" Text="{Binding FriendRequestMessage}" Height="34" Padding="8,0" HintText="申请留言" Margin="0,6,0,6"/>
                                        <ListBox Grid.Row="2" ItemsSource="{Binding UserSearchResults}" ItemTemplate="{StaticResource UserSearchTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                                    </Grid>
                                </TabItem>
                            </TabControl>
                        </Grid>

                        <Grid Grid.Row="1" Visibility="Collapsed">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <Grid Margin="4,3,4,8">
                                <StackPanel><TextBlock Text="我的群聊" Style="{StaticResource HeadingStyle}"/><TextBlock Text="管理已加入的群和邀请" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel>
                                <Button Content="创建群聊" Style="{StaticResource InlineButtonStyle}" Height="32" HorizontalAlignment="Right" controls:ButtonAssist.IsPrimary="True" Command="{Binding OpenCreateGroupDialogCommand}"/>
                            </Grid>
                            <TabControl Grid.Row="1">
                                <TabItem Header="群聊">
                                    <ListBox ItemsSource="{Binding MyGroups}" ItemTemplate="{StaticResource GroupTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                                </TabItem>
                                <TabItem Header="邀请">
                                    <ListBox ItemsSource="{Binding GroupInvitations}" ItemTemplate="{StaticResource InvitationTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                                </TabItem>
                            </TabControl>
                        </Grid>
                    </Grid>
                </Border>

                <!-- 消息区。 -->
                <Border x:Name="MessagePane" Grid.Column="4" Style="{StaticResource ChatPaneStyle}" Padding="0"
                        Visibility="{Binding ShowDetailPane, Converter={StaticResource BooleanToVisibilityConverter}}">
                    <Grid>
                        <Grid Visibility="{Binding IsLobbyOpen, Converter={StaticResource BooleanToVisibilityConverter}}">
                            <Grid.RowDefinitions><RowDefinition Height="58"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                            <Border Padding="14,0" BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="0,0,0,1">
                                <Grid>
                                    <Button Content="‹" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Left" Command="{Binding CloseDetailCommand}"
                                            Visibility="{Binding ShowBackButton, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTip="返回会话列表"/>
                                    <StackPanel VerticalAlignment="Center" Margin="42,0,0,0">
                                        <TextBlock Text="群聊大厅" Style="{StaticResource HeadingStyle}"/>
                                        <TextBlock Text="发现公开群聊，或通过群号加入私密群" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                                    </StackPanel>
                                    <Button Content="↻" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Right" Command="{Binding RefreshRecommendedGroupsCommand}" ToolTip="刷新大厅"/>
                                </Grid>
                            </Border>
                            <Grid Grid.Row="1" Margin="12,10,12,8">
                                <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                <controls:TextEditor Text="{Binding GroupSearchQuery, UpdateSourceTrigger=PropertyChanged}" Height="35" Padding="9,0" HintText="搜索公开群…" KeyDown="GroupSearchBox_KeyDown"/>
                                <Button Grid.Column="1" Content="搜索" Style="{StaticResource InlineButtonStyle}" Height="35" Margin="6,0,0,0" Command="{Binding RefreshRecommendedGroupsCommand}"/>
                            </Grid>
                            <ListBox Grid.Row="2" Margin="10,0" ItemsSource="{Binding RecommendedGroups}" ItemTemplate="{StaticResource GroupTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                            <Border Grid.Row="3" Margin="12,8,12,12" Padding="10" Background="{DynamicResource ToolControlBackgroundBrush}" CornerRadius="11" BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="1">
                                <Grid>
                                    <Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                    <TextBlock Text="通过群号加入" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="10" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0"/>
                                    <controls:TextEditor Grid.Column="1" Text="{Binding GroupNumberQuery, UpdateSourceTrigger=PropertyChanged}" Height="32" Padding="8,0" HintText="输入私密群号" KeyDown="GroupNumberBox_KeyDown"/>
                                    <Button Grid.Column="2" Content="查找" Style="{StaticResource InlineButtonStyle}" Height="32" Margin="6,0,0,0" Command="{Binding LookupGroupCommand}"/>
                                    <ContentControl Grid.ColumnSpan="3" Margin="0,42,0,0" Content="{Binding LookupGroupResult}" ContentTemplate="{StaticResource GroupTemplate}"
                                                    Visibility="{Binding HasLookupGroupResult, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                                </Grid>
                            </Border>
                        </Grid>

                        <Grid Visibility="{Binding IsMessageAreaOpen, Converter={StaticResource BooleanToVisibilityConverter}}">
                        <Grid.RowDefinitions><RowDefinition Height="58"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                        <Border Padding="14,0" BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="0,0,0,1">
                            <Grid>
                                <Button Content="‹" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Left" Command="{Binding CloseDetailCommand}"
                                        Visibility="{Binding ShowBackButton, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTip="返回会话列表"/>
                                <StackPanel VerticalAlignment="Center" Margin="42,0,0,0">
                                    <TextBlock Text="{Binding ConversationTitle}" Style="{StaticResource HeadingStyle}"/>
                                    <TextBlock Text="{Binding ConversationSubtitle}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/>
                                </StackPanel>
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
                                    <Button Content="↻" Style="{StaticResource IconButtonStyle}" ToolTip="刷新消息" Command="{Binding RefreshConversationCommand}" IsEnabled="{Binding HasSelectedConversation}"/>
                                    <Button Content="设置" Style="{StaticResource InlineButtonStyle}" Height="34" Margin="6,0,0,0" ToolTip="群聊管理"
                                            Command="{Binding OpenGroupManagementCommand}" Visibility="{Binding IsSelectedConversationGroup, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                                    <Button Style="{StaticResource IconButtonStyle}" Margin="6,0,0,0" ToolTip="发起语音通话" Command="{Binding StartCallCommand}" IsEnabled="{Binding HasSelectedConversation}">
                                        <Viewbox Width="16" Height="16">
                                            <Path Fill="{DynamicResource MainColor}" Data="M6.62,10.79 C8.06,13.62 10.38,15.94 13.21,17.38 L15.41,15.18 C15.69,14.9 16.08,14.81 16.43,14.93 C17.55,15.3 18.75,15.5 20,15.5 C20.55,15.5 21,15.95 21,16.5 L21,20 C21,20.55 20.55,21 20,21 C10.61,21 3,13.39 3,4 C3,3.45 3.45,3 4,3 L7.5,3 C8.05,3 8.5,3.45 8.5,4 C8.5,5.25 8.7,6.45 9.07,7.57 C9.18,7.92 9.1,8.31 8.82,8.59 Z"/>
                                        </Viewbox>
                                    </Button>
                                </StackPanel>
                            </Grid>
                        </Border>

                        <Grid Grid.Row="1">
                            <ListBox x:Name="MessageList" ItemsSource="{Binding Messages}" ItemTemplate="{StaticResource MessageTemplate}"
                                     ItemContainerStyle="{StaticResource MessageListItemStyle}" Background="#F8F8FC" BorderThickness="0" Padding="12,7"
                                     ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"
                                     ScrollViewer.CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling">
                                <ListBox.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/></ItemsPanelTemplate></ListBox.ItemsPanel>
                                <ListBox.Template>
                                    <ControlTemplate TargetType="ListBox"><ScrollViewer Focusable="False"><ItemsPresenter/></ScrollViewer></ControlTemplate>
                                </ListBox.Template>
                            </ListBox>
                            <Button Content="加载更早消息" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,7,0,0" Height="27"
                                    Command="{Binding LoadEarlierMessagesCommand}" Visibility="{Binding HasEarlierMessages, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" MaxWidth="260"
                                        Visibility="{Binding HasNoSelectedConversation, Converter={StaticResource BooleanToVisibilityConverter}}">
                                <TextBlock Text="💬" FontSize="28" HorizontalAlignment="Center"/>
                                <TextBlock Text="选择一个会话" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,8,0,0"/>
                                <TextBlock Text="可从最近会话、好友或群聊列表开始聊天" Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="9.5" TextAlignment="Center" TextWrapping="Wrap" Margin="0,5,0,0"/>
                            </StackPanel>
                        </Grid>

                        <Border Grid.Row="2" Padding="10" BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="0,1,0,0" Background="{DynamicResource ToolSurfaceBrush}">
                            <Grid>
                                <Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                <Button Content="＋" Style="{StaticResource IconButtonStyle}" ToolTip="发送图片、视频或文件" Click="AttachFileButton_Click" IsEnabled="{Binding CanCompose}"/>
                                <controls:TextEditor Grid.Column="1" x:Name="ComposerBox" Text="{Binding ComposerText, UpdateSourceTrigger=PropertyChanged}" Height="58" MinHeight="38" MaxHeight="92"
                                                     Margin="7,0" Padding="10,7" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"
                                                     HintText="输入消息；Enter 发送，Shift+Enter 换行" HintTextVerticalAlignment="Top" PreviewKeyDown="ComposerBox_PreviewKeyDown" IsEnabled="{Binding HasSelectedConversation}"/>
                                <Button Grid.Column="2" Content="发送" Width="62" Height="38" VerticalAlignment="Bottom" controls:ButtonAssist.IsPrimary="True" Command="{Binding SendTextCommand}" IsEnabled="{Binding CanCompose}"/>
                            </Grid>
                        </Border>
                        </Grid>
                    </Grid>
                </Border>
            </Grid>

            <Border Grid.Row="1" Margin="0,7,0,0" Padding="10,7" CornerRadius="10" Background="{DynamicResource ToolControlBackgroundBrush}"
                    BorderBrush="{DynamicResource ToolDividerBrush}" BorderThickness="1"
                    Visibility="{Binding IsTransferring, Converter={StaticResource BooleanToVisibilityConverter}}">
                <Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="160"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding TransferText}" Foreground="{DynamicResource ToolTextSecondaryBrush}" FontSize="9.5" VerticalAlignment="Center" TextTrimming="CharacterEllipsis"/>
                    <ProgressBar Grid.Column="1" Height="5" Margin="12,0" Minimum="0" Maximum="100" Value="{Binding TransferProgress}" VerticalAlignment="Center"/>
                    <TextBlock Grid.Column="2" Text="{Binding TransferProgress, StringFormat={}{0:0}%}" Foreground="{DynamicResource MainColor}" FontSize="9" VerticalAlignment="Center"/>
                </Grid>
            </Border>
        </Grid>

        <!-- 好友、申请与群邀请统一管理浮层。 -->
        <Grid Panel.ZIndex="29" Background="#680F0F20" Visibility="{Binding IsContactManagementDialogOpen, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Border Width="780" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Page}}" MaxHeight="590" Margin="20" Padding="20"
                    HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource ChatPaneStyle}">
                <Grid>
                    <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                    <Grid>
                        <StackPanel><TextBlock Text="好友与邀请" Style="{StaticResource HeadingStyle}" FontSize="17"/><TextBlock Text="管理好友、好友申请和群聊邀请" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel>
                        <Button Content="×" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Right" Command="{Binding CloseContactManagementDialogCommand}"/>
                    </Grid>
                    <Grid Grid.Row="1" Margin="0,16">
                        <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="16"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                        <Grid>
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <TextBlock Text="好友" Style="{StaticResource HeadingStyle}" FontSize="12" Margin="2,0,0,7"/>
                            <ListBox Grid.Row="1" ItemsSource="{Binding Friends}" ItemTemplate="{StaticResource FriendTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}" ContextMenuOpening="FriendList_ContextMenuOpening">
                                <ListBox.ContextMenu><ContextMenu><MenuItem Header="删除好友" Click="DeleteFriendMenuItem_Click"/></ContextMenu></ListBox.ContextMenu>
                            </ListBox>
                            <TextBlock Grid.Row="2" Text="好友申请" Style="{StaticResource HeadingStyle}" FontSize="12" Margin="2,12,0,7"/>
                            <ListBox Grid.Row="3" ItemsSource="{Binding FriendRequests}" ItemTemplate="{StaticResource FriendRequestTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                        </Grid>
                        <Grid Grid.Column="2">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <TextBlock Text="添加好友" Style="{StaticResource HeadingStyle}" FontSize="12" Margin="2,0,0,7"/>
                            <Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                <controls:TextEditor Text="{Binding UserSearchQuery, UpdateSourceTrigger=PropertyChanged}" Height="34" Padding="8,0" HintText="账号或昵称" KeyDown="UserSearchBox_KeyDown"/>
                                <Button Grid.Column="1" Content="搜索" Style="{StaticResource InlineButtonStyle}" Height="34" Margin="5,0,0,0" Command="{Binding SearchUsersCommand}"/>
                            </Grid>
                            <controls:TextEditor Grid.Row="2" Text="{Binding FriendRequestMessage}" Height="34" Padding="8,0" HintText="申请留言" Margin="0,6,0,6"/>
                            <ListBox Grid.Row="3" ItemsSource="{Binding UserSearchResults}" ItemTemplate="{StaticResource UserSearchTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                            <TextBlock Grid.Row="4" Text="群聊邀请" Style="{StaticResource HeadingStyle}" FontSize="12" Margin="2,12,0,7"/>
                            <ListBox Grid.Row="5" ItemsSource="{Binding GroupInvitations}" ItemTemplate="{StaticResource InvitationTemplate}" ItemContainerStyle="{StaticResource ChatListItemStyle}"/>
                        </Grid>
                    </Grid>
                    <Button Grid.Row="2" Content="完成" Width="78" Height="35" HorizontalAlignment="Right" Command="{Binding CloseContactManagementDialogCommand}"/>
                </Grid>
            </Border>
        </Grid>

        <!-- 创建群聊浮层。 -->
        <Grid Panel.ZIndex="30" Background="#680F0F20" Visibility="{Binding IsCreateGroupDialogOpen, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Border Width="620" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Page}}" MaxHeight="540" Margin="20" Padding="20"
                    HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource ChatPaneStyle}">
                <Grid>
                    <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                    <Grid><StackPanel><TextBlock Text="创建群聊" Style="{StaticResource HeadingStyle}" FontSize="17"/><TextBlock Text="填写群资料，并可立即邀请好友" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel><Button Content="×" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Right" Command="{Binding CloseCreateGroupDialogCommand}"/></Grid>
                    <Grid Grid.Row="1" Margin="0,16,0,16">
                        <Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="16"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                        <StackPanel>
                            <TextBlock Text="群名称" Style="{StaticResource HintStyle}"/>
                            <controls:TextEditor Text="{Binding NewGroupName, UpdateSourceTrigger=PropertyChanged}" Height="37" Margin="0,5,0,11" MaxLength="60" HintText="例如：周末开发者"/>
                            <TextBlock Text="群简介" Style="{StaticResource HintStyle}"/>
                            <controls:TextEditor Text="{Binding NewGroupDescription}" Height="96" Margin="0,5,0,11" MaxLength="300" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" HintText="介绍群聊主题" HintTextVerticalAlignment="Top" Padding="9,7"/>
                            <CheckBox Content="公开群聊（会显示在大厅推荐）" IsChecked="{Binding NewGroupIsPublic}"/>
                            <TextBlock Text="私密群只能通过群号或邀请加入。" Style="{StaticResource HintStyle}" Margin="0,6,0,0"/>
                        </StackPanel>
                        <Grid Grid.Column="2">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <TextBlock Text="邀请好友（可选）" Style="{StaticResource HintStyle}"/>
                            <controls:TextEditor Grid.Row="1" Text="{Binding NewGroupInvitationMessage}" Height="34" Margin="0,5,0,7" HintText="邀请留言"/>
                            <ListBox Grid.Row="2" ItemsSource="{Binding InviteCandidates}" ItemContainerStyle="{StaticResource ChatListItemStyle}">
                                <ListBox.ItemTemplate><DataTemplate><CheckBox IsChecked="{Binding IsSelected}" HorizontalContentAlignment="Stretch"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}"/><TextBlock Grid.Column="1" Text="{Binding AccountText}" Style="{StaticResource HintStyle}"/></Grid></CheckBox></DataTemplate></ListBox.ItemTemplate>
                            </ListBox>
                        </Grid>
                    </Grid>
                    <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right"><Button Content="取消" Width="78" Height="35" Margin="0,0,8,0" Command="{Binding CloseCreateGroupDialogCommand}"/><Button Content="创建群聊" Width="100" Height="35" controls:ButtonAssist.IsPrimary="True" Command="{Binding CreateGroupCommand}"/></StackPanel>
                </Grid>
            </Border>
        </Grid>

        <!-- 群管理浮层。 -->
        <Grid Panel.ZIndex="31" Background="#680F0F20" Visibility="{Binding IsGroupManagementDialogOpen, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Border Width="700" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Page}}" MaxHeight="570" Margin="20" Padding="20"
                    HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource ChatPaneStyle}">
                <Grid>
                    <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
                    <Grid><StackPanel><TextBlock Text="群聊管理" Style="{StaticResource HeadingStyle}" FontSize="17"/><TextBlock Text="{Binding ManagedGroup.GroupNumberText}" Style="{StaticResource HintStyle}" Margin="0,3,0,0"/></StackPanel><Button Content="×" Style="{StaticResource IconButtonStyle}" HorizontalAlignment="Right" Command="{Binding CloseGroupManagementDialogCommand}"/></Grid>
                    <Grid Grid.Row="1" Margin="0,16">
                        <Grid.ColumnDefinitions><ColumnDefinition Width="240"/><ColumnDefinition Width="16"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
                        <StackPanel>
                            <TextBlock Text="群名称" Style="{StaticResource HintStyle}"/><controls:TextEditor Text="{Binding ManagedGroupName}" Height="37" Margin="0,5,0,11" IsEnabled="{Binding CanManageSelectedGroup}"/>
                             <TextBlock Text="群简介" Style="{StaticResource HintStyle}"/><controls:TextEditor Text="{Binding ManagedGroupDescription}" Height="96" Margin="0,5,0,11" AcceptsReturn="True" TextWrapping="Wrap" Padding="9,7" IsEnabled="{Binding CanManageSelectedGroup}"/>
                             <CheckBox Content="公开群聊" IsChecked="{Binding ManagedGroupIsPublic}" IsEnabled="{Binding CanManageSelectedGroup}"/>
                             <CheckBox Content="消息免打扰" IsChecked="{Binding ManagedGroupIsMuted}" Margin="0,8,0,0" ToolTip="开启后不再显示该群的新消息 Windows 通知"/>
                             <Button Content="保存群资料" Height="35" Margin="0,14,0,0" controls:ButtonAssist.IsPrimary="True" Command="{Binding UpdateManagedGroupCommand}" IsEnabled="{Binding CanManageSelectedGroup}"/>
                            <Button Content="退出群聊" Height="35" Margin="0,8,0,0" Click="LeaveGroupButton_Click"/>
                        </StackPanel>
                        <Grid Grid.Column="2">
                            <Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
                            <TextBlock Text="成员" Style="{StaticResource HeadingStyle}" FontSize="12" Margin="2,0,0,7"/>
                            <ListBox Grid.Row="1" ItemsSource="{Binding ManagedGroupMembers}" ItemContainerStyle="{StaticResource ChatListItemStyle}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Grid>
                                            <Grid.ColumnDefinitions><ColumnDefinition Width="36"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
                                            <controls:PersonPicture Width="30" Height="30" DisplayName="{Binding Name}" FontSize="10"/>
                                            <StackPanel Grid.Column="1" Margin="7,0" VerticalAlignment="Center"><TextBlock Text="{Binding Name}" Foreground="{DynamicResource ToolTextPrimaryBrush}" FontSize="10.5"/><TextBlock Style="{StaticResource HintStyle}" Margin="0,2,0,0"><Run Text="{Binding AccountText, Mode=OneWay}"/><Run Text=" · "/><Run Text="{Binding RoleText, Mode=OneWay}"/></TextBlock></StackPanel>
                                            <StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
                                                <Button Content="{Binding RoleActionText}" Style="{StaticResource InlineButtonStyle}" Margin="0,0,5,0" Command="{Binding DataContext.ToggleManagedGroupMemberRoleCommand, RelativeSource={RelativeSource AncestorType=Page}}" CommandParameter="{Binding}" IsEnabled="{Binding CanBeManaged}"/>
                                                <Button Content="移除" Style="{StaticResource InlineButtonStyle}" Tag="{Binding}" Click="RemoveGroupMemberButton_Click" IsEnabled="{Binding CanBeManaged}"/>
                                                <Button Content="转让" Style="{StaticResource InlineButtonStyle}" Margin="5,0,0,0" Tag="{Binding}" Click="TransferGroupOwnerButton_Click" IsEnabled="{Binding CanBeManaged}"/>
                                            </StackPanel>
                                        </Grid>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </Grid>
                    </Grid>
                    <Button Grid.Row="2" Content="完成" Width="78" Height="35" HorizontalAlignment="Right" Command="{Binding CloseGroupManagementDialogCommand}"/>
                </Grid>
            </Border>
        </Grid>
    </Grid>
</Page>
