Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为ballontip创建可从任何wpf页面访问的帮助器类_C#_Wpf - Fatal编程技术网

C# 为ballontip创建可从任何wpf页面访问的帮助器类

C# 为ballontip创建可从任何wpf页面访问的帮助器类,c#,wpf,C#,Wpf,我有一个wpf应用程序,它使用一个NavigationWindow,允许我在主窗口中加载页面 我正在尝试将notifyicon功能添加到我的应用程序中,以便在需要时显示通知窗口 我已将taskbaritem添加到导航窗口 <tb:TaskbarIcon x:Name="MyNotifyIcon" ToolTipText="My Application" IconSource="/Images/Icons/TB.ico"/> 但是,我不知道从助手类中找到控制器MyNotifyIco

我有一个wpf应用程序,它使用一个NavigationWindow,允许我在主窗口中加载页面

我正在尝试将notifyicon功能添加到我的应用程序中,以便在需要时显示通知窗口

我已将taskbaritem添加到导航窗口

 <tb:TaskbarIcon x:Name="MyNotifyIcon" ToolTipText="My Application" IconSource="/Images/Icons/TB.ico"/>
但是,我不知道从助手类中找到控制器MyNotifyIcon的正确方法


有人能给我指出正确的方向吗?

顺便说一句,我以前从未见过NotifyIcon有点酷,但我看了一下它的API。我建议您不要费心命名该控件并尝试在代码中找到它。相反,在主导航窗口中,将其datacontext设置为您定义的帮助器类,并绑定到其iconsource、tooltiptext等:

<tb:TaskbarIcon DataContext="{Binding SomeViewModel}"
  IconSource="..."
  ToolTipText="{Binding Text}"
  Visibility="{Binding IsVisible, Converter=...}" />
…但这些属性将具有实际的getter/setter并引发属性更改事件

使用这种方法,您不需要告诉您的表示层去查看视图层,这并不理想。如果您的视图XAML知道您的表示代码就更好了,但反之亦然,因为这样会松开耦合。在本例中,由于实际代码不依赖于XAML中声明的某个命名控件的存在,所以它会释放耦合

至于如何获取此帮助器视图模型,您可以将对它的引用传递给可以设置它的各种类,或者让导航窗口的子控件引发导航窗口侦听的事件,或者您可以使用您想到的方法,这就是在视图模型上定义一个静态方法,我个人并不提倡这种方法,但它最接近您想要做的事情

但是,如果设置了此处所采用的方法,请记住在该控件中确实对其进行了命名,因此可以将其作为相关控件上的静态属性重新公开:

class MyControlWithTipIcon
{
    public static TaskbarIcon TaskBarIcon { get { return MyNotifyIcon; } }

}
现在,您可以从助手类访问它:

public static void DisplayMessageArea(string messageToDisplay)
{
    MyControlWithTipIcon.TaskBarIcon.ToolTipText = messageToDisplay;
    MyControlWithTipIcon.TaskBarIcon.Visibility = ... //i.e. show the message
}

我个人根本不会提倡这种方法,但这可能是最简单的方法,尤其是你所要求的。但是,如果您使用此方法,请记住在对TaskBarIcon静态属性执行任何操作之前检查其是否为null,请记住,无论包含静态属性的控件是否已加载或实例化,静态属性都将返回一个值。

为什么要在表示层代码中有一个助手类直接操作命名的GUI控件?tb.ShowCustomBalloon是实现功能的唯一API,还是可以通过XAML实现?理想情况下,一切都是通过代码实现的。我发现,如果每次我需要一个taskbaricon时都创建一个新的taskbaricon,我就无法在展示气球后关闭它。我希望能像这样给助手打电话。Notification.DisplayMessageAreastring.FormatWelcome back{0},CustomerName;
class MyControlWithTipIcon
{
    public static TaskbarIcon TaskBarIcon { get { return MyNotifyIcon; } }

}
public static void DisplayMessageArea(string messageToDisplay)
{
    MyControlWithTipIcon.TaskBarIcon.ToolTipText = messageToDisplay;
    MyControlWithTipIcon.TaskBarIcon.Visibility = ... //i.e. show the message
}