我正在制作演示聊天应用程序,我想要的是允许用户选择listview datatemplate内的聊天消息。 有没有办法允许用户复制邮件?另外,我想在消息中显示url作为可点击的超链接。
<DataTemplate x:Key="ChatTemplate">
<Grid HorizontalAlignment="Stretch">
<Grid HorizontalAlignment="Right" >
<Border BorderBrush="Orange" BorderThickness="1" CornerRadius="10" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top">
<Grid VerticalAlignment="Stretch">
<TextBox Grid.Row="1" Margin="5" MinHeight="30" IsReadOnly="True" Text="{Binding message}" TextWrapping="Wrap" Foreground="Black" FontSize="14" />
</Grid>
</Border>
</Grid>
</Grid>
</DataTemplate>
<ListView
x:Name="chatListView"
AutomationProperties.AutomationId="chatListView"
AutomationProperties.Name="Items"
Grid.Row="2"
Margin="120,0,0,0"
IsItemClickEnabled="False"
ItemTemplate="{StaticResource ChatTemplate}"
SelectionMode="None"
IsSwipeEnabled="True">
</ListView>
提前致谢。
答案 0 :(得分:0)
设置文字:Clipboard.SetText(“foo-bar”)
检查剪贴板是否包含文本:Clipboard.ContainsText(“foo-bar”)
无法获取文本的方法Clipboard.GetText()导致安全异常
答案 1 :(得分:0)
答案 2 :(得分:0)
如果我理解正确,我会复制/引用选定的绑定对象并将其存储在其他位置。消息的文本将是对象的属性,因此可以在其他地方传输或稍后由剪贴板复制。因此,例如,您可能已经做了类似的事情:
public class Message
{
public string strMessageUuid { get; set; }
public string strUserUuid { get; set; }
public string strMessageSender { get; set; }
public string strMessageText { get; set; }
public bool booMessageSaved { get; set; }
}
然后将您的邮件列表绑定到ListBox:
ObservableCollection<Message> obsMessages = new ObservableCollection<Message>();
lstChatMessages.ItemsSource = obsMessages;
因此,当用户点击ListItem时,您可以获得相关对象:
private void lstChatMessages_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0 && lstChatMessages.SelectedItem != null)
{
Message objMessage = (Message)e.AddedItems[0];
//Now you can do what you want with the message, eg
MessageBox.Show(objMessage.strMessageText);
}
}
因此,您可以将所选消息存储在已保存消息的新列表中,例如
List<Message> lstUserSavedMessages = new List<Message>();
lstUserSavedMessages.Add(objMessage);
然后将列表存储在某处。或者你可以获得你想要的属性并存储它,或者只是存储消息uuid并从主列表中检索相关消息,或者添加已保存/有利的属性然后对其进行过滤,例如
var savedmessages = obsMessages.Where(a => a.booMessageSaved == "true" && a.strUserUuid == "exampleuseridvalue");
在其他地方,您可以向用户显示已保存的聊天记录,如果他们需要,可以将其复制到剪贴板等,或者具有可以为他们发送消息正文的电子邮件功能等。
希望这有帮助。
[编辑]
要在邮件中添加网址作为可点击链接,只需在XAML中将一个超链接按钮添加到ListBox的数据模板中,例如:
<ListBox Name="lstChatMessages" Height="550" Margin="0,0,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<!-- Your other layout items here -->
<HyperlinkButton NavigateUri="{Binding urlMessageUrl}" TargetName="_blank" Content="{Binding strContent}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
显然,您需要在Message对象中使用相应的属性。