using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using YwxAppWpfDanMu.Models; namespace YwxAppWpfDanMu.Controls { public partial class DanMuItem : UserControl { public DanMuMessage Message { get; private set; } public DanMuItem(DanMuMessage message) { InitializeComponent(); Message = message; UpdateUI(); } private void UpdateUI() { ContentText.Text = Message.Content; ContentText.Foreground = new SolidColorBrush(Message.Color); ContentText.FontSize = Message.FontSize; ContentText.FontFamily = Message.FontFamily; ContentText.FontWeight = Message.FontWeight; ContentText.FontStyle = Message.FontStyle; Opacity = Message.Opacity; if (!string.IsNullOrEmpty(Message.AvatarUrl)) { // 实际项目中应该使用异步加载或缓存机制 var image = new ImageSourceConverter().ConvertFromString(Message.AvatarUrl) as ImageSource; AvatarBrush.ImageSource = image; } else { AvatarBrush.ImageSource = null; } } protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { base.OnMouseLeftButtonUp(e); RaiseEvent(new RoutedEventArgs(ClickEvent)); } public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent( "Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DanMuItem)); public event RoutedEventHandler Click { add { AddHandler(ClickEvent, value); } remove { RemoveHandler(ClickEvent, value); } } } }