{"id":20272902,"url":"https://github.com/muak/aiforms.dialogs","last_synced_at":"2025-04-11T04:42:37.601Z","repository":{"id":34877835,"uuid":"150751479","full_name":"muak/AiForms.Dialogs","owner":"muak","description":"AiForms.Dialogs for Xamarin.Forms","archived":false,"fork":false,"pushed_at":"2022-12-02T07:11:46.000Z","size":2003,"stargazers_count":150,"open_issues_count":7,"forks_count":20,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-11T04:42:31.481Z","etag":null,"topics":["android","custom-dialogs","dialog","ios","loading","popup","progress","toast","user-dialogs","xamarin-forms","xaml"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muak.png","metadata":{"files":{"readme":"README-ja.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["muak"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-09-28T14:20:14.000Z","updated_at":"2025-02-12T13:33:44.000Z","dependencies_parsed_at":"2023-01-15T09:50:02.917Z","dependency_job_id":null,"html_url":"https://github.com/muak/AiForms.Dialogs","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muak%2FAiForms.Dialogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muak%2FAiForms.Dialogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muak%2FAiForms.Dialogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muak%2FAiForms.Dialogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muak","download_url":"https://codeload.github.com/muak/AiForms.Dialogs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248345281,"owners_count":21088242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","custom-dialogs","dialog","ios","loading","popup","progress","toast","user-dialogs","xamarin-forms","xaml"],"created_at":"2024-11-14T12:47:26.387Z","updated_at":"2025-04-11T04:42:37.578Z","avatar_url":"https://github.com/muak.png","language":"C#","funding_links":["https://github.com/sponsors/muak"],"categories":[],"sub_categories":[],"readme":"# AiForms.Dialogs for  Xamarin.Forms\n\nAiForms.Dialogs は Xamarin.Forms で カスタムダイアログを XAML を使って簡単に作成して自由な位置に表示できるライブラリです。Android と iOS に対応しています。\n\n![Build status](https://kamusoft.visualstudio.com/NugetCI/_apis/build/status/AiForms.Dialogs)\n\n## 機能\n\n* [Dialog](#dialog)\n* [Toast](#toast)\n* [Loading](#loading)\n\n全てのダイアログは、.NETStandard プロジェクトで XAML または c# コードを使って定義できます。またこれらのダイアログはLayoutAlignmentやOffsetプロパティを指定して好きな位置に表示させることができます。\n任意でダイアログの開始・終了時にアニメーションロジックを埋め込むことも可能です。\n\n## API Reference\n\n* [IDialog](#idialog)\n* [IReusableDialog](#ireusabledialog)\n* [IToast](#itoast)\n* [ILoading](#iloading)\n* [IReusableLoading](#ireusableloading)\n* [ExtraView](#extraview)\n* [DialogView](#dialogview)\n* [ToastView](#toastview)\n* [LoadingView](#loadingview)\n\n## Minimum Platform OS Version \n\niOS: iOS10  \nAndroid: version 5.1.1 (only FormsAppcompatActivity) / API22\n\n## Demo\n\n\u003ca href=\"https://www.youtube.com/watch?feature=player_embedded\u0026v=-DzMvQCQU1Q\n\" target=\"_blank\"\u003e\u003cimg src=\"https://img.youtube.com/vi/-DzMvQCQU1Q/0.jpg\" \nalt=\"\" width=\"480\" height=\"360\" border=\"0\" /\u003e\u003c/a\u003e\n\n# Get Started\n\n## Nuget Installation\n\n[https://www.nuget.org/packages/AiForms.Dialogs/](https://www.nuget.org/packages/AiForms.Dialogs/)\n\n```bash\nInstall-Package AiForms.Dialogs -pre\n```\n\n.NETStandard プロジェクトと各プラットフォームのプロジェクトにインストールする必要があります。\n\n### 各プラットフォームの設定\n\n#### iOS AppDelegate.cs\n\n```csharp\npublic override bool FinishedLaunching(UIApplication app, NSDictionary options) {\n    global::Xamarin.Forms.Forms.Init();\n    AiForms.Dialogs.Dialogs.Init(); //need to write here\n    ...\n}\n```\n\n#### Android MainActivity.cs\n\n```csharp\nprotected override void OnCreate(Bundle bundle)\n{\n    base.OnCreate(bundle);\n\n    global::Xamarin.Forms.Forms.SetFlags(\"FastRenderers_Experimental\");\n    global::Xamarin.Forms.Forms.Init(this, bundle);\n    AiForms.Dialogs.Dialogs.Init(this); //need to write here\n    ...\n}\n```\n\n## Dialog\n\nXAML や c# コードで定義したダイアログを呼び出す機能です。\nこのダイアログを使えば、Custom Renderer や Effects を使わずにダイアログを自由にデザインし好きな場所に配置することができます。\n\n\u003cimg src=\"./images/dialog.png\" width=\"600\" /\u003e\n\n### DialogView の定義\n\nDialog機能を利用するには、ContentViewを継承した専用の DialogView を作成する必要があります。\n\n```csharp\npublic partial class MyDialogView : DialogView\n{\n    public MyDialogView()\n    {\n        InitializeComponent();\n    }\n\n    public override void SetUp()\n    {\n        // ダイアログがオープンする度に最初に呼び出されます\n    }\n\n    public override void TearDown()\n    {\n        // ダイアログがクローズする度に呼び出されます\n    }\n\n    public override void RunPresentationAnimation()\n    {\n        // 必要に応じてダイアログ表示時のアニメーション処理を記述します。\n    }\n\n    public override void RunDismissalAnimation()\n    {\n        // 必要に応じてダイアログが閉じる時のアニメーション処理を記述します。\n    }\n\n    public override void Destroy()\n    {\n        // DialogViewのクリーンアップ処理を記述します。ダイアログが破棄された時に呼び出されます。\n    }\n\n    void Handle_OK_Clicked(object sender, System.EventArgs e)\n    {\n        // ダイアログに完了を通知します。\n        DialogNotifier.Complete();\n    }\n\n    void Handle_Cancel_Clicked(object sender, System.EventArgs e)\n    {\n        // ダイアログにキャンセルを通知します。\n        DialogNotifier.Cancel();\n    }\n}\n```\n\n```xml\n\u003cextra:DialogView\n    xmlns=\"http://xamarin.com/schemas/2014/forms\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\" \n    xmlns:extra=\"clr-namespace:AiForms.Dialogs.Abstractions;assembly=AiForms.Dialogs.Abstractions\"\n    x:Class=\"Sample.Views.MyDialogView\"\n    CornerRadius=\"10\" OffsetX=\"0\" OffsetY=\"0\" UseCurrentPageLocation=\"false\" \n    VerticalLayoutAlignment=\"Center\" HorizontalLayoutAlignment=\"Center\" \u003e\n\n    \u003cStackLayout WidthRequest=\"200\"\u003e\n        \u003cLabel Text=\"{Binding Title}\" /\u003e\n        \u003cButton Text=\"Cancel\" Clicked=\"Handle_Cancel_Clicked\"/\u003e\n        \u003cButton Text=\"OK\" Clicked=\"Handle_OK_Clicked\" /\u003e\n    \u003c/StackLayout\u003e\n\n\u003c/extra:DialogView\u003e\n```\n\n\u003e Visual Studio の ContentView Xaml のテンプレートから作成するのが良いかもしれません。\n\n### Dialog の表示\n\nDialogViewを定義したら、IDialogのメソッドをどこからでも呼び出せるようになります。\nダイアログを表示するには、AiForms.Dialogs.Dialog.Instance で IDialog のインスタンスを取得して、ShowAsync メソッドを呼び出します。\n\n```csharp\nusing AiForms.Dialogs;\n\npublic async Task SomeMethod()\n{\n    var ret = await Dialog.Instance.ShowAsync\u003cMyDialogView\u003e(new{Title=\"Hello\"});\n    // キャンセルされた場合はfalse, 完了した場合はtrueを返します。\n    // 任意で ViewModel を DialogView に渡すことができます。\n    // ダイアログが閉じられたら、全ての関連リソースは自動的に破棄されます。\n\n    // また状態を保つことができる IReusableDialog インスタンスを生成することもできます。\n    var reusableDialog = Dialog.Instance.Create\u003cMyDialogView\u003e();\n\n    ret = await reusableDialog.ShowAsync();\n    // この場合はダイアログが閉じられてもDispose処理は行われません。\n\n    // ShowAsync はDisposeを実行するまで何回でも使用できます。\n    reusableDialog.Dispose();\n}\n```\n\n## Toast\n\nこれは、Androidのネイティブの トースト によく似た（というかAndroid実装はToastそのもの）、数秒で消えるダイアログを表示する機能です。\nこの機能を使えば、Toast の内容を XAML や c# コードで自由にデザインし、好きな場所に配置することができます。\n\n\u003cimg src=\"./images/toast.png\" width=\"600\" /\u003e\n\n### ToastView の定義\n\nToast を利用するには、ContentViewを継承した専用の ToastView を定義する必要があります。\n\n```csharp\npublic partial class MyToastView : ToastView\n{\n    public MyToastView()\n    {\n        InitializeComponent();\n    }\n\n    // 開始アニメーションの定義\n    public override void RunPresentationAnimation() {}\n\n    // 終了アニメーションの定義\n    public override void RunDismissalAnimation() {}\n\n    // クリーンアップ処理の定義\n    public override void Destroy() {}\n}\n```\n\n```xml\n\u003cextra:ToastView xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\" \n             xmlns:extra=\"clr-namespace:AiForms.Dialogs.Abstractions;assembly=AiForms.Dialogs.Abstractions\"\n             x:Class=\"Sample.Views.MyToastView\"\n             HorizontalLayoutAlignment=\"Center\"\n             VerticalLayoutAlignment=\"Center\"\n             OffsetX=\"50\" OffsetY=\"50\" Duration=\"{Binding Duration}\" \u003e\n\n    \u003cStackLayout WidthRequest=\"150\" Spacing=\"0\"\u003e\n        \u003cLabel Text=\"{Binding Title}\" /\u003e\n    \u003c/StackLayout\u003e\n\u003c/extra:ToastView\u003e\n```\n\n### Toast の表示\n\nToastView を定義したら、IToast のメソッドをどこからでも利用できるようになります。\nToast を表示するには、AiForms.Dialogs.Toast.Instance から IToast インスタンスを取得して、Show メソッドを呼びます。\n\n```csharp\nusing AiForms.Dialogs;\n\npublic async Task SomeMethod()\n{\n    Toast.Instance.Show\u003cMyToastView\u003e(new{Title=\"Hello\",Duration=1500});\n    // 任意で、ViewModel をToastViewに渡すことができます。\n}\n```\n\n## Loading\n\nこれは、ローディング状況を通知するための、ユーザーが閉じることができないダイアログを表示する機能です。\nこれには2つのモードがあり、ひとつは、デフォルトの組み込みダイアログで、もうひとつは、DialogやToastと同じような LoadingView を使ったカスタムダイアログです。\nLoadingView によるカスタムダイアログを利用すると、自由に内容をデザインして好きな位置に配置することが可能です。\nどちらのモードもViewに進捗を通知する機能を持っています。\n\n\u003cimg src=\"./images/loading.png\" width=\"600\" /\u003e\n\n\u003cimg src=\"./images/customloading.png\" width=\"600\" /\u003e\n\n### デフォルトの Loading Dialog の表示\n\nDefault の Loading Dialog を表示するには、AiForms.Dialogs.Loading.Instanceから ILoading インスタンスを取得して、StartAsync メソッドを呼び出します。\n\n以下のコードはデフォルトの Loading Dialog の使用方法を示しています。\n\n```csharp\nusing AiForms.Dialogs;\nusing AiForms.Dialogs.Abstractions;\npublic async Task SomeMethod()\n{\n    // Default Loading Dialog 用の設定が可能です。\n    Configurations.LoadingConfig = new LoadingConfig {\n        IndicatorColor = Color.White,\n        OverlayColor = Color.Black,\n        Opacity = 0.4,\n        DefaultMessage = \"Loading...\",\n    };\n\n    await Loading.Instance.StartAsync(async progress =\u003e{\n        // 重い処理など\n        for (var i = 0; i \u003c 100; i++)\n        {\n            await Task.Delay(50);\n            // IProgress\u003cdouble\u003eの値を使ってDialogに進捗を送信することができます。\n            progress.Report((i + 1) * 0.01d);\n        }\n    });\n}\n```\n\n### カスタムの LoadingView の定義\n\nカスタムの Loading Dialog には、ContentView を継承した専用の LoadingView を定義する必要があります。\n\n```csharp\npublic partial class MyLoadingView : LoadingView\n{\n    Animation animation;\n\n    public MyLoadingView()\n    {\n        InitializeComponent();\n\n        animation = new Animation(v=\u003e{\n            image.Rotation = 360 * v;\n\n            if(v \u003c= 0.3){\n                image.Scale = 1.0 - 0.5 * v / 0.3;\n            }\n            else if(v \u003c= 0.6){\n                image.Scale = 0.5 + 0.8 * (v - 0.3) / 0.3;\n            }\n            else {\n                image.Scale = 1.3 - 0.2 * (v - 0.6) / 0.4;\n            }\n        },0,1,Easing.Linear,()=\u003e{\n            \n        });\n    }\n\n    // 必要に応じて進捗用のループアニメーションなどを定義します。\n    public override void RunPresentationAnimation()\n    {\n        this.Animate(\"sample\", animation, 16, 1440, null, (v, c) =\u003e {\n            image.Rotation = 0;\n            image.Scale = 1;\n        }, () =\u003e true);\n    }\n\n    // アニメーションの停止を指示します。\n    public override void RunDismissalAnimation()\n    {\n        this.AbortAnimation(\"sample\");\n    }\n\n    // クリーンアップ処理を定義します。\n    public override void Destroy() {}\n}\n```\n\n```xml\n\u003cextra:LoadingView \n    xmlns=\"http://xamarin.com/schemas/2014/forms\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\" \n    xmlns:extra=\"clr-namespace:AiForms.Dialogs.Abstractions;assembly=AiForms.Dialogs.Abstractions\"\n    x:Class=\"Sample.Views.MyLoadingView\" \n    x:Name=\"Me\" \n    OverlayColor=\"#2000FF00\" \u003e\n    \u003cStackLayout WidthRequest=\"60\" HeightRequest=\"60\" Spacing=\"0\"\u003e\n        \u003cImage x:Name=\"image\" WidthRequest=\"36\" HeightRequest=\"36\" Source=\"icon.png\" /\u003e\n        \u003cLabel Text=\"{Binding Message}\" FontSize=\"Micro\" /\u003e\n        \u003cLabel Text=\"{Binding Progress,Source={x:Reference Me},StringFormat='{0:P0}'}\" FontSize=\"Micro\" /\u003e        \n    \u003c/StackLayout\u003e\n\u003c/extra:LoadingView\u003e\n```\n\n\u003e LoadingView は double型のProgressプロパティを持っています。このプロパティを自身にバインディングすれば、進捗を表現することが可能です。\n\n### カスタムの Loading Dialog の表示\n\nLoadingView を定義すると、ILoading.Create メソッドを使って、IReusableLoading のインスタンスを生成することができます。\nIReusableLoading インスタンスの StartAsync メソッドを使って、カスタム Loading Dialog を表示することができます。\n\n```csharp\nusing AiForms.Dialogs;\n\npublic async Task SomeMethod()\n{\n    // IReusableLoading インスタンスを生成\n    var reusableLoading = Loading.Instance.Create\u003cMyLoadingView\u003e();\n    // 任意で ViewModel を LoadingView に渡すことができます。\n\n    await reusableLoading.StartAsync(async progress =\u003e {\n        // 重い処理など\n        await Task.Delay(1000);\n        // IProgress を使って LoadingView に進捗を送ることができます。\n        progress.Report(1.0);\n    });\n\n    // StartAsync メソッドはDisposeするまで何回でも使用できます。\n    reusableLoading.Dispose();\n}\n```\n\n# API Reference\n\n## IDialog\n\n### Methods\n\n#### Task`\u003cbool\u003e` ShowAsync`\u003cT\u003e`(object viewModel = null)\n#### Task`\u003cbool\u003e` ShowAsync(DialogView view, object viewModel = null)\n    \n* 型またはDialogViewのインスタンスを指定してダイアログを表示します。任意でBindingするためのViewModelを渡すことができます。\n* ダイアログが閉じられたとき、全ての関連リソースは自動的に破棄されます。\n* Cancelの場合はfalse, Completeの場合はtrueを返します。\n\n\n#### IReusableDialog Create`\u003cTView\u003e`(object viewModel = null) \n#### IReusableDialog Create(DialogView view, object viewModel = null)\n\n* 型またはDialogViewのインスタンスを指定して IReusableDialog のインスタンスを生成します。任意でBindingするためのViewModelを渡すことができます。\n\n## IReusableDialog\n\n### Methods\n\n#### Task`\u003cbool\u003e` ShowAsync()\n\n* ダイアログを表示します。\n* Cancelの場合はfalse, Completeの場合はtrueを返します。\n* ダイアログを閉じてもDisposeを実行するまでリソースを破棄しません。\n\n#### Dispose()\n\n## IToast\n\n### Methods\n\n#### void Show`\u003cTView\u003e`(object viewModel = null)\n\n* 型を指定して Toast を表示します。任意でViewModelを渡すことができます。\n\n## ILoading\n\n### Methods\n\n#### Task StartAsync(Func`\u003cIProgress\u003cdouble\u003e, Task\u003e` action, string message = null, bool isCurrentScope = false)\n\n* Loading Dialog を表示し、処理を待機します。\n* action には 目的の処理を行いTaskを返すFuncを指定します。このFuncはIProgressのインスタンスのパラメータがあり、これを利用して進捗をダイアログに通知することが可能です。\n* message にはLoadingアイコンの下に表示する文字列を指定します。\n* ダイアログが属する親Viewを KeyWindow から 現在のViewController の View に変更する場合は isCurrentScope に true を指定します。iOS でのみ有効で、これによってモーダルの範囲をアプリケーションレベルではなくカレントページの範囲に限定することができます。\n\n#### void Show(string message = null, bool isCurrentScope = false)\n\n* 待機なしで Loading Dialog を表示します。\n\n#### void Hide()\n\n* Loading Dialog を閉じます。\n\n#### void SetMessage(string message)\n\n* ローディングの文字列を変更します。\n\n#### IReusableLoading Create`\u003cTView\u003e`(object viewModel = null)\n#### IReusableLoading Create(LoadingView view, object viewModel = null)\n\n* 型または LoadingView のインスタンスを指定して IReusableLoading インスタンスを生成します。任意で ViewModel を渡すこともできます。\n\n## IReusableLoading\n\n### Methods\n\n#### Task StartAsync(Func`\u003cIProgress\u003cdouble\u003e, Task\u003e` action, bool isCurrentScope = false)\n\n* カスタムの Loading Dialog を表示して処理を待ちます。\n\n#### void Show(bool isCurrentScope = false)\n\n* 待機なしでカスタムの Loading Dialog を表示します。\n\n#### void Hide()\n\n* カスタムの Loading Dialog を閉じます。\n\n\n## LoadingConfig\n\nデフォルトのLoading Dialogのグローバル設定です。\nAiForms.Dialogs.Abstractions.Configurations プロパティにこのインスタンスをセットすると設定が有効になります。\n\n\u003e カスタム Loading Dialog を使用する場合は、この設定は使われません。\n\n### Properties\n\n* OffsetX\n    * 水平方向の位置調整の値。\n* OffsetY\n    * 垂直方向の位置調整の値。\n* IndicatorColor\n    * Loading アイコンの色。\n* FontSize\n    * ローディング文字列のフォントサイズ。\n* FontColor\n    * ローディング文字列の文字色。\n* OverlayColor\n    * ダイアログのオーバレイの背景色。\n* Opacity\n    * 全体の透過値。 (0-1)\n* DefaultMessage\n    * 規定のローディング文字列。\n* ProgressMessageFormat\n    * ローディング文字列のフォーマット。c# の string format に準拠します。\n    * 例） ``{0}\\n{1:P0}`` 0がmessage 1がprogressになっています。\n* IsReusable\n    * LoadingView を再利用するかどうか。 (default: false)\n    * 通常は、ダイアログが閉じられる度にインスタンスは破棄されますが、trueにするとインスタンスが再利用されるようになり、閉じた時に破棄されず、次に開くときに再生成しません。\n\n## ExtraView\n\nこれは、DialogView, ToastView, and LoadingView の基底クラスです。\n\nこのViewは、HorizontalLayoutAlignment、VerticalLayoutAlignment、OffsetX、OffsetXなどの自身の位置を決定するプロパティが定義されており、全てのViewで利用することができます。\n\nContentViewを継承しているので任意の VisualElement を配置できます。\n\nまたダイアログの表示時、消滅時のアニメーションやダイアログが破棄される時のクリーンアップ処理などを定義できる virtual method が用意されています。\n\n### 共通プロパティ\n\n* ProportionalWidth\n    * 画面幅に対する割合で幅を指定します。(0-1)\n    * 指定しなければ、幅には WidthRequestの値が自動サイズが使われます。\n* ProportionalHeight\n    * 画面の高さに対する割合で高さを指定します。(0-1)\n    * 指定しなければ、幅には HeightRequestの値が自動サイズが使われます。\n* VerticalLayoutAlignment\n    * 垂直位置を指定を Start / Center / End / Fill から指定します。 (default: Center)\n* HorizontalLayoutAlignment\n    * 水平位置を Start / Center / End / Fill から指定します。 (default: Center)\n* OffsetX\n    * LayoutAlignmentからの水平方向の調整位置を相対値で指定します。\n* OffsetY\n    * LayoutAlignmentからの垂直方向の調整位置を相対値で指定します。\n* CornerRadius\n    * ダイアログの角を丸める場合の値。\n* AutoRotateForIOS\n    * iOSで画面回転を有効にするかどうか。(default: true)\n    * 向きを固定にしている場合はこの値は無効です。\n\n### 共通 Virtual Methods\n\n* RunPresentationAnimation\n    * ダイアログが表示されるときのアニメーションを記述します。\n* RunDismissalAnimation\n    * ダイアログが閉じられるときのアニメーションを記述します。\n* Destroy\n    * 自身のクリーンアップする処理などを記述します。ダイアログが破棄された時に呼ばれます。\n\n\u003e アニメーション の時間は現在のところ 250ms を想定して設計されていますので、これ以上長い時間を設定するとアニメーションが途中で中止される可能性があります。\n\n## DialogView\n\nこの View は、IDialog または IReusableDialog が表示するダイアログの中身を定義するものです。\n全ての ExtraView のプロパティとメソッドと以下のプロパティとメソッドが利用可能です。\n\n### Properties\n\n* IsCanceledOnTouchOutside\n    * ダイアログの外側をタッチした場合に、キャンセル扱いにするかどうか。(default: ture)\n* OverlayColor\n    * ダイアログの外側のオーバーレイの色。\n* UseCurrentPageLocation\n    * HorizontalLayoutAlignment と VerticalLayoutAlignment で配置する位置の基準をWindowエリアにするか現在のページのエリアにするかの値。\n    * Trueにすると、各辺はページ内に限定されます。ステータスバー、ナビゲーションバー、タブバーなどを含まない範囲になります。\n\n#### DialogNotifier\n\n* DialogView から IDialog インスタンスへ キャンセルか完了の通知を送るためのオブジェクト。\n* DialogView内でボタンをタップした時にダイアログを完了させたりキャンセルさせたりするには以下のコードのようにします。\n\n```csharp\nvoid Handle_OK_Clicked(object sender, System.EventArgs e)\n{\n    DialogNotifier.Complete();\n}\n\nvoid Handle_Cancel_Clicked(object sender, System.EventArgs e)\n{\n    DialogNotifier.Cancel();\n}\n```\n\nまた ViewModelからバインディングを通じて使用することもできます。\n\n```Xml\n\u003cex:DialogView DialogNotifier=\"{Binding Notifier}\"\u003e\n```\n\n```csharp\npublic IDialogNotifier Notifier { get; set; }\n\nasync void Show()\n{\n    await Dialog.Instance.ShowAsync\u003cMyDialogView\u003e(this);\n}\n\nvoid Complete()\n{\n    Notifier.Complete();\n}\nvoid Cancel()\n{\n    Notifier.Cancel();\n}\n```\n\n### Virtual Methods\n\n* SetUp\n    * ダイアログが開かれる度に毎回呼ばれます。ここに自身の準備処理を記述します。IReusableDialog用です。\n* TearDown\n    * ダイアログが閉じられる度に毎回呼ばれます。ここに後始末用の処理を記述します。IReusableDialog用です。\n\n## ToastView\n\nこのViewは、IToast が表示するトーストの内容を定義するためのものです。\n全てのExtraViewのプロパティとメソッドと以下のプロパティが利用できます。\n\n\u003e Androidでは Toast は OffsetX や OffsetY の値を使って Windows の端を越えることはできません。\n\n### Properties\n\n* Duration\n    * トーストが消えるまでのミリ妙。(1-3500) (default:1500)\n\n## LoadingView\n\nこのViewは、IReusableLoading が表示するカスタムの Loading dialog の内容を定義するためのものです。\n全てのExtraViewのプロパティとメソッドと以下のプロパティが利用できます。\n\n### Properties\n\n* Progress\n    * 進捗を表現するためのdouble型の値。\n    * この値を使ってカスタムViewで、UIで進捗を表現することができます。\n* OverlayColor\n    * ダイアログの全体の背景色。\n\n## License\n\nThe MIT Licensed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuak%2Faiforms.dialogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuak%2Faiforms.dialogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuak%2Faiforms.dialogs/lists"}