2018-05-25 (金)
[WPF] C# ポップアップをマウスや指定コントロール.の位置に表示
Popupコントロールを使用したメッセージを表示します。表示位置を選択する使用例です。
環境
- Windows 10 Pro 64bit 1709
- Visual Studio Community 2017 15.5.7
- .NET Framework 4.6.1
- C# 7.0
結果
var popup = new PopupController();
// マウスカーソルの位置に表示
popup.Open("エラー", "入力してね!");
// 特定のコントロールの位置に表示
popup.Open("エラー", "入力してね!", TextBox1);
実装
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Media;
class PopupController
{
public Popup Popup { get; }
public TextBlock TextBlock { get; }
public Border Border { get; }
public PopupController()
{
Popup = new Popup
{
IsOpen = false,
StaysOpen = false,
AllowsTransparency = true,
PopupAnimation = PopupAnimation.Fade,
Focusable = true,
};
Border = new Border
{
Background = Brushes.DarkOrange,
BorderBrush = Brushes.OrangeRed,
BorderThickness = new Thickness(1.0d),
Padding = new Thickness(4.0d)
};
TextBlock = new TextBlock { Foreground = Brushes.White };
Popup.Child = Border;
Border.Child = TextBlock;
Popup.MouseDown += (sender, args) => Popup.IsOpen = false;
}
public void Open(string title, string text, UIElement target = null)
{
Popup.IsOpen = false;
TextBlock.Inlines.Clear();
if (!string.IsNullOrWhiteSpace(title))
{
TextBlock.Inlines.Add(new Bold(new Run(title)));
}
if (!string.IsNullOrWhiteSpace(text))
{
if (TextBlock.Inlines.Count > 0)
TextBlock.Inlines.Add(new LineBreak());
TextBlock.Inlines.Add(new Run(text));
}
Popup.PlacementTarget = target;
Popup.Placement = target == null ? PlacementMode.Mouse : PlacementMode.Bottom;
Popup.IsOpen = true;
}
}
感謝
関連記事
新着記事