트레이 아이콘 만있는 WPF 응용 프로그램


144

나는 총 WPF 초보자이며 누군가가 트레이에 최소화되기 시작하는 응용 프로그램을 작성하는 방법에 대한 포인터를 줄 수 있는지 궁금합니다. 아이디어는 주기적으로 RSS 피드를 가져오고 새로운 피드가있을 때 Toaster-Popup을 만듭니다.

응용 프로그램에는 기본 창 (기본적으로 모든 피드 항목이 포함 된 목록)이 있어야하지만 기본적으로 숨겨져 있어야합니다.

XAML 및 WPF에 대해 읽기 시작했으며 App.xaml의 StartupUri가 기본 창을 가리켜 야한다는 것을 알고 있지만 SysTray 아이콘을 수행하고 기본 창을 숨기는 올바른 방법이 무엇인지 알 수 없습니다. 즉, 사용자가 창을 최소화하면 작업 표시 줄이 아니라 트레이로 최소화해야합니다.

힌트가 있습니까?


3
모든 제안에 감사드립니다! WPF-NotifyIcon은 빠른 테스트를 통해 매우 유망하고 고통스럽지 않다는 것을 보여줄 것입니다.
Michael Stum

답변:


114

WPF에는 NotifyIcon이 없습니다.

내 동료가이 무료 라이브러리를 사용하여 다음과 같은 효과를 얻었습니다.


2
환상적인 도서관. 캔 트는 그것을 활용하기 위해 기다립니다!
Rob Hay

2
드류, 링크가 여기서 사라진 것 같습니다. 이 라이브러리에 대한 대체 링크가 있습니까? 빠른 검색을 수행했지만 결과가 동일한 프로젝트에 대한 것인지 확인할 수 없습니다.
Brad Larson

@BradLarson, 사이트가 다운 된 것 같습니다. 그러나 어쨌든 프로젝트는 Nuget 패키지로 제공됩니다 (Dale의 답변 참조)
Thomas Levesque

4
많은 투표에도 불구하고이 답변은 유용하고 합법적 인 스택 오버플로 답변이 아닙니다. 스택 오버플로 표준과 달리 링크 전용 답변입니다. 답변 자체에 구체적이고 중요한 정보를 제공하여이 답변을 개선하십시오. 이렇게하면 외부 사이트의 상태에 관계없이 정보를 사용할 수 있습니다.
Evan Larsen

107

System.Windows.Forms에서 NotifyIcon 컨트롤을 사용해야하거나 Windows API에서 제공하는 Notify Icon API를 사용할 수도 있습니다. WPF 이와 동등한 기능을 제공하지 않으며 Microsoft Connect에서 여러 번 요청되었습니다.

System.Windows.FormsWPF 응용 프로그램에서 NotifyIcon Component 를 사용하는 GitHub 에 코드가 있습니다.이 코드는 https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs 에서 볼 수 있습니다

요약 비트는 다음과 같습니다.

ShowInTaskbar = False를 사용하여 WPF 창을 생성하고 표시 할 수없는 상태로로드합니다.

수업 수준에서 :

private System.Windows.Forms.NotifyIcon notifyIcon = null;

OnInitialize () 중 :

notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

OnLoaded () 중 :

notifyIcon.Visible = true;

상호 작용 (위의 notifyIcon.Click 및 DoubleClick으로 표시) :

void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

여기에서 컨텍스트 메뉴, 팝업 창 등과 같은 WPF 컨트롤 및 API 사용을 재개 할 수 있습니다.

그렇게 간단합니다. 구성 요소를 호스팅하는 데 WPF Window가 정확히 필요하지는 않습니다. WPF 앱에 WPF 앱을 도입하는 가장 편리한 방법입니다 (창은 일반적으로 App.xaml을 통해 정의 된 기본 진입 점이므로). SWF 구성 요소는 .NET Framework (현재 및 미래의 모든 .NET Framework 버전을 기반으로 함)의 일부이므로 WPF를 지원하는 .NET Framework 설치에도 SWF 구성 요소가 존재하므로 WPF 래퍼 또는 타사 컨트롤이 필요하지 않습니다. 현재까지 Microsoft는 SWF 지원이 곧 .NET Framework에서 중단 될 것이라는 징후가 없습니다.

희망이 도움이됩니다.

트레이 아이콘을 얻으려면 3.0 이전 프레임 워크 구성 요소를 사용해야하지만 치즈가 WPF 범위 내에있는 시스템 트레이 개념은 없습니다. WPF는 프레젠테이션 기술이며 알림 아이콘은 운영 체제 ( "프레젠테이션"이 아님) 개념입니다.


2
자세한 설명 감사합니다!
Michael Stum

4
+1, 이것은 설명만을 위해 선택된 답이어야합니다.
ToastyMallows

2
마지막 단락에 대한 찬사. 바로 내가 알아야 할 것이었고, 훌륭한 개발자를 simple는 것은 간단하고 통찰력있는 세부 사항입니다.
Matthew Layton

1
마지막 단락에 대한 재미있는 부분은 "WPF는 Windows 전용입니다."는 .NET Core에서 WPF를 크로스 플랫폼으로 만들지 않는 것에 대한 Microsoft의 변명입니다. 그렇다면 Windows 전용이지만 Windows 전용 기능을 노출하기에 충분하지 않은 Windows 전용입니까?
McGuireV10

1
내 WPF 앱에서 System.Windows.Forms에 대한 참조를 싫어하는 유일한 사람입니까?
Joel

48

나는 최근에 이와 같은 문제가 있었다. 불행히도, NotifyIcon은 현재 Windows.Forms 컨트롤 일뿐입니다. 사용하려면 프레임 워크의 해당 부분을 포함시켜야합니다. 나는 그것이 당신이 얼마나 WPF 순수 주의자인지에 달려 있다고 생각합니다.

빠르고 쉬운 시작 방법을 원한다면 WinForms NotifyIcon에 전혀 의존하지 않는 코드 프로젝트 에서이 WPF NotifyIcon 컨트롤 확인하십시오 . 최신 버전은 저자의 웹 사이트NuGet 패키지 에서 사용할 수 있습니다 . 이것은 지금까지 나에게 가장 깨끗하고 깨끗한 방법 인 것 같습니다.

  • 텍스트가 아닌 풍부한 도구 설명
  • WPF 상황에 맞는 메뉴 및 팝업
  • 명령 지원 및 라우트 된 이벤트
  • 유연한 데이터 바인딩
  • OS에서 제공하는 기본 메시지가 아닌 풍부한 풍선 메시지

확인 해봐. 놀라운 샘플 앱도 함께 제공되며 사용이 매우 간편하며 멋진 Windows Live Messenger 스타일 WPF 팝업, 툴팁 및 상황에 맞는 메뉴를 사용할 수 있습니다. RSS 피드를 표시하는 데 적합합니다. 비슷한 용도로 사용하고 있습니다.


5
2017 년 이민자를위한, 그 nuget 패키지는 쓸모가 아직 같은 다른 이름으로 게시 nuget.org/packages/Hardcodet.NotifyIcon.Wpf
MCY
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.