0

我想构建一个 WPF 应用程序,它在启动时只有一个托盘图标。如果用户与托盘上下文菜单中的菜单条目进行交互,则会出现 Windows。

我需要加载 MainWindow,所以我可以收听剪贴板更改事件。但我不想表现出来。

我试过:

<Window x:Class="ClipboardListener.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="Should not see me"
    ShowInTaskbar="False" Visibility="Collapsed" Opacity="100"
    Width="320" Height="240">

但它仍然出现?将可见性设置为隐藏对我不起作用,因为我需要一些窗口来向 WinAPI 注册剪贴板事件侦听器。

有任何想法吗?

4

1 回答 1

2

我最近有非常相似的任务。我所有使 Window 不可见的尝试、我的谷歌搜索、我的 stackoverflowing 等都失败了。最后我有一种感觉,由于某种原因,不可见的窗口不应该出现在 WPF 中。如果有像 WinForms 那样的 TrayIcon 控件,那将是一件容易的事。不幸的是,WPF 没有 TrayIcon。这导致出现在 WinForms 中的那个。

这是一篇关于这个问题的好文章。而我使用这个 dll 的代码:

<Window x:Class="ScannerClientWpf.TrayIcon"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ni="clr-namespace:Hardcodet.Wpf.TaskbarNotification;assembly=Hardcodet.Wpf.TaskbarNotification"
    Title="TrayIcon" WindowStyle="None" AllowsTransparency="True" Background="Transparent" ShowActivated="False" ShowInTaskbar="False" >
<Grid>
    <ni:TaskbarIcon IconSource="/ScannerClient;component/app.ico" 
                    ToolTipText="ScannerClient">
        <ni:TaskbarIcon.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Close" Click="MenuItem_Click"/>
            </ContextMenu>
        </ni:TaskbarIcon.ContextMenu>
    </ni:TaskbarIcon>
</Grid>

于 2012-04-29T18:29:30.617 回答