Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于dialog的疑问 #491

Open
yyhLogin opened this issue Nov 19, 2024 · 11 comments
Open

关于dialog的疑问 #491

yyhLogin opened this issue Nov 19, 2024 · 11 comments
Labels
enhancement New feature or request

Comments

@yyhLogin
Copy link

demo中的dialog可以正常运行,但是我自己写的时候并没有弹出dialog也没有报错,我有个疑问是我是初始化了一个类似九宫格的布局,想在每个小格子上弹出dialog,这个时候的hostId该怎么给,我是给的一个编号id,但是我看你的示例代码是在program.cs文件中
public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>() .UseManagedSystemDialogs() .UsePlatformDetect() .With(new Win32PlatformOptions()) .LogToTrace();
里注册的,还有别的地方需要注意的吗
这里是你的 hostId->public const string LocalHost = "LocalHost";
我是这样写的 [ObservableProperty]private int _winNum;

@rabbitism
Copy link
Member

rabbitism commented Nov 19, 2024

还是需要知道你在设计怎样的布局,看描述不太懂。九宫格每个部分要弹出自己这部分独立的dialog吗?

@yyhLogin
Copy link
Author

还是需要知道你在设计怎样的布局,看描述不太懂。九宫格每个部分要弹出自己这部分独立的dialog吗?

是的,比如视频监控窗口之类的,有具体的实现步骤的文档吗?
我把主window改成了<u:UrsaWindow></u:UrsaWindow>标签现在可以正常弹出下面这个
var result = await MessageBox.ShowOverlayAsync("Are you sure you want to exit?\n您确定要退出吗?", "Exit", button: MessageBoxButton.YesNo);
但是我九宫格内想这样弹什么都没出来
` [RelayCommand]
public async Task ShowDialogAsync()
{
var options = new OverlayDialogOptions()
{
FullScreen = false,
HorizontalAnchor = HorizontalAnchor,
VerticalAnchor = VerticalAnchor,
HorizontalOffset = HorizontalOffset,
VerticalOffset = VerticalOffset,
Mode = DialogMode.None,
Buttons = DialogButton.None,
CanLightDismiss = false,
CanDragMove = false,
IsCloseButtonVisible = true,
CanResize = true,
};
await OverlayDialog.ShowModal<UsbDialog, UsbDialogViewModel>(new UsbDialogViewModel(), WinNum.ToString(), options: options);
Debug.WriteLine("1111");

    }`

@rabbitism
Copy link
Member

如果想要在一个局部区域显示,需要在这个局部区域最上层遮罩一个OverlayDialogHost,然后把这个Host的HostId设置为你需要的ID,然后在调用Dialog的时候传入这个ID。

<u:OverlayDialogHost HostId="{x:Static vm:DialogDemoViewModel.LocalHost}">

@yyhLogin
Copy link
Author

如果想要在一个局部区域显示,需要在这个局部区域最上层遮罩一个OverlayDialogHost,然后把这个Host的HostId设置为你需要的ID,然后在调用Dialog的时候传入这个ID。

<u:OverlayDialogHost HostId="{x:Static vm:DialogDemoViewModel.LocalHost}">

<u:OverlayDialogHost HostId="{Binding WinNum}">
这样写编译的时候会报错Unable to find suitable setter or adder for property HostId of type Ursa:Ursa.Controls.OverlayDialogHost for argument Avalonia.Markup.Xaml:Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindingExtension, available setter parameter lists are:
System.String Line 10, position 23

@rabbitism
Copy link
Member

rabbitism commented Nov 19, 2024

哦,HostId确实不是AvaloniaProperty。您这9个也是通过ItemsSource生成吗?


换句话说,HostId是一个不能绑定的属性,只能赋予固定值或者静态变量

@yyhLogin
Copy link
Author

哦,HostId确实不是AvaloniaProperty。您这9个也是通过ItemsSource生成吗?

嗯,其实也不是固定的9个,就是根据配置自定义生成的

@yyhLogin
Copy link
Author

哦,HostId确实不是AvaloniaProperty。您这9个也是通过ItemsSource生成吗?

换句话说,HostId是一个不能绑定的属性,只能赋予固定值或者静态变量

我记得wpf的MaterialDesignThemes关于dialog有个api是IsOpen="{Binding HomeDialogIsOpen}",他可以根据isopen直接来弹出对话框,并且弹出框内容可以在直接在materialDesign:DialogHost.DialogContent</materialDesign:DialogHost.DialogContent>里写,可以实现这个api吗

@rabbitism
Copy link
Member

哦,HostId确实不是AvaloniaProperty。您这9个也是通过ItemsSource生成吗?
换句话说,HostId是一个不能绑定的属性,只能赋予固定值或者静态变量

我记得wpf的MaterialDesignThemes关于dialog有个api是IsOpen="{Binding HomeDialogIsOpen}",他可以根据isopen直接来弹出对话框,并且弹出框内容可以在直接在materialDesign:DialogHost.DialogContent</materialDesign:DialogHost.DialogContent>里写,可以实现这个api吗

Ursa Dialog主要解决的是多层次Dialog的问题,如果是普通的Dialog通常甚至都不需要单独设计控件,一个ContentControl然后Bool值控制IsVisible就可以了。不管如果确实需要的话可以增加这种控件,只是我在实际工作中完全不会去使用这样的控件。

@yyhLogin
Copy link
Author

哦,HostId确实不是AvaloniaProperty。您这9个也是通过ItemsSource生成吗?
换句话说,HostId是一个不能绑定的属性,只能赋予固定值或者静态变量

我记得wpf的MaterialDesignThemes关于dialog有个api是IsOpen="{Binding HomeDialogIsOpen}",他可以根据isopen直接来弹出对话框,并且弹出框内容可以在直接在materialDesign:DialogHost.DialogContent</materialDesign:DialogHost.DialogContent>里写,可以实现这个api吗

Ursa Dialog主要解决的是多层次Dialog的问题,如果是普通的Dialog通常甚至都不需要单独设计控件,一个ContentControl然后Bool值控制IsVisible就可以了。不管如果确实需要的话可以增加这种控件,只是我在实际工作中完全不会去使用这样的控件。

我不是太专业的C#开发人员,能力有些不足,我现在主要是因为信创需要复刻之前的wpf程序,参照之前wpf的程序是这样实现

@rabbitism
Copy link
Member

rabbitism commented Nov 19, 2024

我想确定一件事情,在您之前的WPF项目中 Material Dialog在这种情况下也需要在Show的时候指定Identifier对吗?

@yyhLogin
Copy link
Author

我想确定一件事情,在您之前的WPF项目中 Material Dialog在这种情况下也需要在Show的时候指定Identifier对吗?
并没有指定Identifier,DialogHost节点下可以定义DialogContent,也可以通过IsOpen来打开关闭,您这边可以参考下他的api设计

@rabbitism rabbitism added the enhancement New feature or request label Dec 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants