私は初めて WPF に手を出しましたが、システム トレイで実行する基本的なアプリケーションを作成することにしました。winforms NotifyIcon を追加し、トレイに最小化してウィンドウを非表示にできるので、すべて正常に動作しています。
ここで物事が奇妙になります。
アプリケーションを常にタスク バーから非表示にし、notifyicon
常にシステム トレイに表示することにしました。クリック イベント ハンドラーを追加して、ウィンドウがアップしているときに通知アイコンをクリックすると非表示になり、ダウンしているときにクリックすると、かなり標準的なものが表示されるようにしました。
最後に、ウィンドウはトレイに最小化された状態から始まります。
そのため、アプリケーションを起動すると、システム トレイ アイコンしかありません。クリックすると、期待どおりにウィンドウが表示されます。通知アイコンをもう一度クリックすると、ご想像のとおり、ウィンドウが消えます。3 回クリックすると、ウィンドウがポップアップする代わりに、左下隅にタイトル バー (左上のアイコン、右上の最小化/閉じるボタンなど) だけが表示されます。これが「崩壊」の振る舞いだと思います。これを奇妙にする最後のことは、私が使用してWindowLayout = none
いるため、ウィンドウにタイトルバーすらありません..それでも、左下隅に表示されます。
4 回クリックすると、バーが消えます。等々。
したがって、非表示/表示は初めて機能し、その後は奇妙になります。
これには本当に頭を悩ませています。このようなものを見た人はいますか、何か提案はありますか?
https://stackoverflow.com/questions/12088892/impossible-to-restore-application-hidden-programmatically この男は、私が見ている動作をほぼ正確に説明していますが、残念ながら彼の質問には答えていません。
XAMLは次のとおりです。
<Window x:Class="Tagalong.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Tagalong Beta .1" Height="350" Width="500" Icon="content/tagalong_icon.ico"
ResizeMode="CanMinimize" Topmost="True"
WindowStyle="None" Background="Transparent" AllowsTransparency="True" ShowInTaskbar="false" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Border Name="LeftPane" Grid.Row="0" Grid.Column="0" BorderBrush="Black"
BorderThickness="1.5" Height="350" Width="250" CornerRadius="10" Background="Blue" >
<Grid>
</Grid>
</Border>
<Border Name="RightPane" BorderBrush="Black" Grid.Row="0" Grid.Column="1"
BorderThickness="1.5" Height="350" Width="250" CornerRadius="10" Background="Green">
<Grid>
</Grid>
</Border>
</Grid>
</Window>
コードは次のとおりです。
void InitializeSystemTrayOptions()
{
notifyIcon = new NotifyIcon();
notifyIcon.Icon = new System.Drawing.Icon(@"C:\dev\desktop\Tagalong\Tagalong\tagalong_icon.ico");
notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);
notifyIcon.Visible = true;
this.Visibility = Visibility.Hidden;
this.WindowState = WindowState.Minimized;
}
void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (this.WindowState == WindowState.Normal)
{
this.WindowState = WindowState.Minimized;
this.Visibility = Visibility.Hidden;
}
else if (this.WindowState == WindowState.Minimized)
{
this.WindowState = WindowState.Normal;
this.Visibility = Visibility.Visible;
}
}
}
private NotifyIcon notifyIcon;