我正在尝试构建一个聊天应用程序,我想模仿facebook标签的朋友功能。当用户在文本块中键入@时,我想弹出一个带有项列表的上下文菜单。如何在wpf mvvm app中触发?
实施例。
答案 0 :(得分:1)
我会按以下方式进行:
订阅TextChanged事件,只要有包含@的更改,然后显示弹出窗口,否则隐藏它。
请注意,它会跟踪TextBox中的新更改,因此一旦用户按下另一个键,弹出窗口就会消失;或者当用户从弹出窗口中提供的自动完成中选择用户时,弹出窗口将消失
用户未输入@
用户只需键入@
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Popup x:Name="MyPopup" Placement="Center">
<Popup.Child>
<Border BorderBrush="Red" BorderThickness="1" Background="White">
<Grid>
<TextBlock>My popup</TextBlock>
</Grid>
</Border>
</Popup.Child>
</Popup>
<TextBox TextChanged="TextBoxBase_OnTextChanged" />
</Grid>
</Window>
代码背后:
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication11
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e)
{
var textBox = (TextBox) sender;
foreach (TextChange textChange in e.Changes)
{
string substring = textBox.Text.Substring(textChange.Offset, textChange.AddedLength);
if (substring == "@")
{
MyPopup.IsOpen = true;
}
else
{
MyPopup.IsOpen = false;
}
}
}
}
}
也就是说,您可能希望进一步增强它并将其正确地集成到您的应用程序中; - )