我使用Hardcodet WPF NotifyIcon在某些事件中显示自定义气球。
如果我在MainWindow的xaml中创建TaskbarIcon
,那么我的气球就会放在任务栏附近:
但是当我在资源文件(xaml)或应用程序类中创建TaskbarIcon
时,我的气球被放置在任务栏上:
为什么这些案例之间的行为存在差异以及如何控制自定义气球的位置?
编辑:我使用下一个代码来测试它:
(App.xaml中):
<Application x:Class="TestBalloon.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tb="http://www.hardcodet.net/taskbar"
StartupUri="MainWindow.xaml">
<Application.Resources>
<tb:TaskbarIcon x:Key="TrayIcon" ToolTipText="Created From Resources" />
</Application.Resources>
</Application>
(App.xaml.cs):
public partial class App : Application
{
public TaskbarIcon AppTrayIcon;
protected override void OnStartup(StartupEventArgs e)
{
AppTrayIcon = (TaskbarIcon)FindResource("TrayIcon");
}
}
(MainWindow.xaml):
<Window x:Class="TestBalloon.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tb="http://www.hardcodet.net/taskbar"
Title="MainWindow" Height="350" Width="525">
<Grid>
<tb:TaskbarIcon x:Name="MainWindowTrayIcon" ToolTipText="Created in MainWindow" />
<Button x:Name="MyButton"
Content="ClickMe"
Margin="10,10,10,10"
Click="MyButton_OnClick"/>
</Grid>
</Window>
(MainWindow.xaml.cs):
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MyButton_OnClick(object sender, RoutedEventArgs e)
{
FancyBalloon bal = new FancyBalloon(); // From Hardcodet WPF NotifyIcon Tutorial
// To use TaskbarItem created in MainWindow.xaml
//MainWindowTrayIcon.ShowCustomBalloon(bal, PopupAnimation.Slide, null);
// To use TaskbarItem created in App.xaml
((App)Application.Current).AppTrayIcon.ShowCustomBalloon(bal, PopupAnimation.Slide, null);
}
}