0

我在一个 `WPF\Telerik 项目中工作。我遇到了一个非常奇怪的问题,由于功能的相互依赖性,我无法使用解决方法。

我的项目具有自动注销功能,为此我必须使用如下所示的这段代码。

private void InitializeAutoLogoffFeature()
    {
        HwndSource windowSpecificOSMessageListener = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
        windowSpecificOSMessageListener.AddHook(new HwndSourceHook(CallBackMethod));
        LogOffHelper.LogOffTime = logOffTime;
        LogOffHelper.MakeAutoLogOffEvent += new MakeAutoLogOff(AutoLogOffHelper_MakeAutoLogOffEvent);
        LogOffHelper.StartAutoLogoffOption();

    }

在这HwndSource windowSpecificOSMessageListener = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);行代码中,我必须通过 window( this)。

因此必须使用因为构造函数只接受类型[Window_Name]来实现窗口。WindowWindowInteropHelperWindow

但是当我暗示如下

public partial class MainWindow : Window
{

我得到一个错误,

Partial declarations of '[WPFApplication].MainWindow' must not specify different base classes

MainWindow不是一个Window它的一个Telerik window

XML 如下所示。

    <telerik:RadWindow x:Class="[WPFApplication].MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        Header="POS" Height="820" Width="1280" 
        WindowStartupLocation="CenterScreen">

    <telerik:RadWindow.Resources>
..

这是我的 App.xaml

<Application x:Class="[WPFApplication].App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow"
         >

<Application.Resources>

</Application.Resources>

我也尝试过使用此代码App.xaml.cs

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        new MainWindow().Show();
        base.OnStartup(e);
    }
}

我应该如何克服这个错误?

4

1 回答 1

2

如果你MainWindow是 a RadWindow,你需要

public partial class MainWindow : RadWindow

因为你的窗口的类XAML.cs需要是相同的:

<telerik:RadWindow x:Class="[WPFApplication].MainWindow" ...>
         ^^^^^^^^^

根据这个线程中的帖子,RadWindow使用一个Window可以像这样访问的容器

var window = this.ParentOfType<Window>();  

因此您可以使用您的RadWindowas MainWindow知识库文章)并将标准 WPF 窗口传递给 InteropHelper

于 2013-01-15T09:38:30.993 回答