gpt4 book ai didi

c# - 如何在 Avalonia 应用程序中为 OpenFolderDialog 设置标题?

转载 作者:行者123 更新时间:2023-12-04 13:34:02 39 4
gpt4 key购买 nike

我正在与 OpenFileDialog 一起工作, SaveFileDialogOpenFolderDialog在 Avalonia 应用程序中。
一个要求是将标题设置为某个字符串。
我为 OpenFileDialog 实现了这一目标和 SaveFileDialog但是 不是 OpenFolderDialog .OpenFolderDialog拒绝应用标题,因此只有根据操作系统语言的默认标题保持设置。

我发现在 ControlCatalogStandalone OpenFolderDialog工作正常,即标题可以根据需要设置。
所以,我试图减少 ControlCatalogStandalone 对话 功能并将其转换为尽可能类似于我的测试应用程序。
我无法做到这一点,但我找到了一些线索,可以帮助更有技能的开发人员找到我的测试应用程序行为不当的原因。

解决方案 项目 的s ControlCatalogStandalone 结构和组成与我的 Avalonia 测试应用程序大不相同。
在我的测试应用程序中,目标框架是 .NET Core 3.1 .
的一个项目中ControlCatalogStandalone 解决方案目标框架是.NET Standard 2.0 .
所以,我认为 OpenFolderDialog工作正常 .NET Standard但不在 .NET Core .
我也认为如果 ControlCatalogStandalone 使用当前版本的 Avalonia for Visual Studio 从头开始​​构建扩展,它不会产生框架的混合。

以下是我的测试应用程序的相关代码部分:

主窗口.axaml:

<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:DialogTests.ViewModels;assembly=DialogTests"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Width="200" Height="150"
x:Class="DialogTests.Views.MainWindow"
Icon="/Assets/avalonia-logo.ico"
Title="DialogTests">

<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>

<Grid RowDefinitions="*,*,*">
<Button Grid.Column="0" Grid.Row="0" Command="{Binding OpenFileDialogCommand}" Content="OpenFileDialog"/>
<Button Grid.Column="0" Grid.Row="1" Command="{Binding SaveFileDialogCommand}" Content="SaveFileDialog"/>
<Button Grid.Column="0" Grid.Row="2" Command="{Binding OpenFolderDialogCommand}" Content="OpenFolderDialog"/>
</Grid>

</Window>
MainWindowViewModel.cs:
using Avalonia.Controls;
using DialogTests.Views;
using ReactiveUI;
using System.Collections.Generic;
using System.Reactive;

namespace DialogTests.ViewModels
{
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel()
{
OpenFileDialogCommand = ReactiveCommand.Create(() => {
new OpenFileDialog()
{
Title = "Open File Dialog",
Filters = GetFilters()
}.ShowAsync(MainWindow.Instance);
});

SaveFileDialogCommand = ReactiveCommand.Create(() =>
{
new SaveFileDialog()
{
Title = "Save File Dialog",
Filters = GetFilters()
}.ShowAsync(MainWindow.Instance);
});

OpenFolderDialogCommand = ReactiveCommand.Create(() => {
new OpenFolderDialog()
{
Title = "Open Folder Dialog"
}.ShowAsync(MainWindow.Instance);
});
}

public ReactiveCommand<Unit, Unit> OpenFileDialogCommand { get; }
public ReactiveCommand<Unit, Unit> SaveFileDialogCommand { get; }
public ReactiveCommand<Unit, Unit> OpenFolderDialogCommand { get; }

List<FileDialogFilter> GetFilters()
{
return new List<FileDialogFilter>
{
new FileDialogFilter
{
Name = "Text files", Extensions = new List<string> {"txt"}
},
new FileDialogFilter
{
Name = "All files",
Extensions = new List<string> {"*"}
}
};
}
}
}
MainWindow.axaml.cs:
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;

namespace DialogTests.Views
{
public class MainWindow : Window
{
public static MainWindow Instance { get; private set; }
public MainWindow()
{
Instance = this;
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
}

private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
}
我正在显示最后一个文件,因为我无法实现该方法 Window GetWindow() => (Window)this.VisualRoot;在我的 ViewModel 中 ControlCatalogStandalone DialogsPage 背后的代码中实现和使用(实际上是 UserControl )。
所以,我实现了 Instance属性(property),这可能是一个黑客。
如果您还可以给我提示获取 MainWindow 实例的最佳实践。我会幸福的。

我的问题是无法在 OpenFolderDialog 中设置标题吗? .NET Core 的未决问题实现,或者你能告诉我如何让它在我的简单测试应用程序中工作吗?

最佳答案

我不熟悉/不熟悉 Avalon 框架,因此我不会对您的不同设置测试过多评论。不过好像OpenFolderDialog有一个错误,它在显示时没有设置标题,至少对于它的 视窗 执行。这在 github 源上报告为一个问题,似乎尚未解决:

frm.SetTitle is missing for the folder dialog:Windows/Avalonia.Win32/SystemDialogImpl#L116


(与 FileDialog 的 here 相比)。
引用: https://github.com/AvaloniaUI/Avalonia/issues/3037
没有进一步挖掘来源,不清楚为什么 ControlCatalogStandalone示例功能正确,因为它似乎在 #ShowAsync(使用 here)中使用了相同的方法,定义为 here .

关于c# - 如何在 Avalonia 应用程序中为 OpenFolderDialog 设置标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63323297/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com