iNKORE-NET / UI.WPF.Modern

Modern (Fluent 2) styles and controls for your WPF applications
GNU Lesser General Public License v2.1
447 stars 39 forks source link

.NET Framework 的支持情况? #64

Closed istanb84 closed 3 months ago

istanb84 commented 3 months ago

Describe the bug 根据项目页面和nuget页面的介绍,支持 .NET Framework 4.5.2 及以上, 但我在 .NET Framework 4.7.2 的工程中引入 iNKORE.UI.WPF.Modern 0.9.29 后,出现2个问题: 1.没有自动添加依赖包 iNKORE.UI.WPF,程序无法启动 2.在添加了 iNKORE.UI.WPF 包,并根据文档做基础设置后程序无法启动,报错信息: image

托管调试助手 "PInvokeStackImbalance":“对 PInvoke 函数“iNKORE.UI.WPF.Modern!iNKORE.UI.WPF.Modern.Controls.Primitives.MaximizedWindowFixer::GetWindowPlacement”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”

To Reproduce Steps to reproduce the behavior:

  1. 在VS2022中创建项目 WPF 应用(.NET Framework) ,框架选择 .NET Framework 4.7.2
  2. 根据文档在 App.xaml 中加入资源:

    <Application x:Class="WpfDesktopTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfDesktopTest"
             xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ui:ThemeResources/>
                <ui:XamlControlsResources/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    </Application>

    3.在主窗口中加入样式:

    <Window x:Class="WpfDesktopTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfDesktopTest"
        xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
        ui:WindowHelper.UseModernWindowStyle="True"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
    
    </Grid>
    </Window>
  3. 启动应用程序。

Expected behavior 可以正常启动并应用样式。

Desktop (please complete the following information):

Additional context 作为对比,我新建了一个 .NET 6.0 WPF 项目,添加了同样的代码,程序启动正常。

NotYoojun commented 3 months ago

上面的报错是 win32api 的锅,可以不用理他,直接继续即可。 目前是支持 .NET Framework 4.7.2 的,这个没问题。

关于这个报错的更多信息请看:https://github.com/iNKORE-NET/UI.WPF.Modern/issues/13

istanb84 commented 3 months ago

@NotYoojun 感谢回复。 但选择继续后还会提示,需要继续忽略才能启动,而且窗口的拖动、最小化、最大化都会触发这个异常, 这样会导致在debug模式下很难进行调试,不停的中断。

我也试用了另一个库:https://github.com/Kinnara/ModernWpf 它在 .NET Framework 的框架下不会出现这个异常,不知是否有参考价值。

后续如果有时间的话是否会考虑优化一下这个问题呢?

NotYoojun commented 3 months ago

Screenshot_2024-06-07-16-35-51-182_com.microsoft.emmx-edit.jpg

把这个关了就是啊

NotYoojun commented 3 months ago

Screenshot_2024-06-07-16-36-48-637_com.github.android-edit.jpg

这个问题是一个叫 MaximizeWindowFixer 优化的东西引发的,你可以在窗口层面把它禁用。

ModernWpf 是没有这个优化的,所以也不存在这个问题。

NotYoojun commented 3 months ago

https://github.com/iNKORE-NET/UI.WPF.Modern/blob/main/source%2FiNKORE.UI.WPF.Modern%2FControls%2FPrimitives%2FMaximizedWindowFixer.cs

ModernWpf 里面并没有这个东西

istanb84 commented 3 months ago

@NotYoojun 明白了,谢谢