「Avalonia UI - ダイアログ」の版間の差分

ナビゲーションに移動 検索に移動
299行目: 299行目:
     // 選択されたファイルを処理
     // 選択されたファイルを処理
     // ...略
     // ...略
}
</syntaxhighlight>
<br><br>
== ファイル選択タイアログ (StorageProviderクラス) ==
==== StorageProviderのプロパティ ====
下表に、ファイル選択ダイアログのプロパティのうち、設定を意識する必要がある主なプロパティを示す。<br>
<br>
<center>表. StorageProviderクラスの主なプロパティ<br>
{| class="wikitable" style="background-color:#fefefe;"
|-
! style="background-color:#00ffff;" | プロパティ名
! style="background-color:#00ffff;" | データ型
! style="background-color:#00ffff;" | 意味
|-
| AllowMultiple || bool || 複数のアイテムの選択を許可するかどうかを指定する。<br>複数のアイテムを選択する場合 : true<br>単一のファイルのみの場合 : false (既定値 : false)
|-
| FileTypeFilter || IReadOnlyList<FilePickerFileType>型 || <code>FilePickerOpenOptions</code>等のオプションクラスのプロパティとして使用する。<br>選択可能なファイルタイプを制限するためのフィルタのリストを指定する。
|-
| SuggestedStartLocation || IStorageFolder型 || ファイルピッカーやフォルダピッカーが開く初期ディレクトリを指定する。<br><code>FilePickerOpenOptions</code>や<code>FolderPickerOpenOptions</code>等のオプションクラスのプロパティとして使用する。<br><br>未指定または<code>null</code>を指定した場合、ファイルピッカーやフォルダピッカーは、システムやアプリケーションのデフォルトの開始位置を使用する。<br>多くの場合、ユーザのドキュメントディレクトリ、または、最後にファイルピッカーを使用した場所になる。
|-
| Title || string || ファイル選択ダイアログのウインドウタイトルを指定する。
|}
</center>
<br>
<br>
==== Filtersプロパティ (ファイルの種類) の設定 ====
ダイアログで開くことができるファイルの種類は、<code>Filters</code>プロパティにフィルタ文字列を設定する。<br>
<br>
フィルタ文字列の設定を以下に示す。<br>
* FileDialogFilterクラスの使用
*: 各フィルタはFileDialogFilterオブジェクトとして定義される。
* Nameプロパティ
*: ユーザに表示されるフィルタの名前。
* Extensionsプロパティ
*: 拡張子のリストであり、ワイルドカード (*) を含めずに指定する。
* 複数の拡張子
*: 1つのフィルタに複数の拡張子を含めることができる。
* 全てのファイル
*: 全てのファイルを表す場合は、拡張子として <code>"*"</code> を使用する。
* フィルタの順序
*: リストに追加した順序でユーザに表示される。
<br>
<syntaxhighlight lang="c#">
using Avalonia.Controls;
using System.Collections.Generic;
public class FileDialogExample
{
    public void ShowFileDialog()
    {
      var dialog = new OpenFileDialog();
      // Filtersプロパティの設定方法 1
      // List<FileDialogFilter>の使用
      dialog.Filters = new List<FileDialogFilter>
      {
          new FileDialogFilter { Name = "すべてのファイル", Extensions = new List<string> { "*" } },
          new FileDialogFilter { Name = "テキストファイル", Extensions = new List<string> { "txt" } },
          new FileDialogFilter { Name = "テキストファイルとすべてのファイル", Extensions = new List<string> { "txt", "*" } },
          new FileDialogFilter { Name = "XMLファイル", Extensions = new List<string> { "xml" } },
          new FileDialogFilter { Name = "HTMLファイル", Extensions = new List<string> { "html", "htm" } },
          new FileDialogFilter { Name = "XMLファイルとHTMLファイルとすべてのファイル", Extensions = new List<string> { "xml", "html", "htm", "*" } },
          new FileDialogFilter { Name = "イメージファイル", Extensions = new List<string> { "png", "jpg", "gif", "bmp" } }
      };
      // Filtersプロパティの設定方法 2
      // FiltersのAddメソッドの使用
      dialog.Filters.Add(new FileDialogFilter { Name = "すべてのファイル", Extensions = { "*" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "テキストファイル", Extensions = { "txt" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "テキストファイルとすべてのファイル", Extensions = new List<string> { "txt", "*" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "XMLファイル", Extensions = { "xml" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "HTMLファイル", Extensions = new List<string> { "html", "htm" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "XMLファイルとHTMLファイルとすべてのファイル", Extensions = new List<string> { "xml", "html", "htm", "*" } });
      dialog.Filters.Add(new FileDialogFilter { Name = "イメージファイル", Extensions = new List<string> { "png", "jpg", "gif", "bmp" } });
      // ファイル選択ダイアログを表示
      var result = await dialog.ShowAsync(this);
      if (result != null)
      {
          foreach (var path in result)
          {
            System.Console.WriteLine($"Selected file: {path}");
          }
      }
    }
}
</syntaxhighlight>
<br>
==== 使用例 ====
以下の例では、FilePickerOpenOptionsクラスを使用してstorageProviderクラスを設定した後、ディレクトリ選択ダイアログを開いている。<br>
<br>
SuggestedStartLocationやFileTypeFilterは、StorageProviderクラスの直接のプロパティではないことに注意する。<br>
<br>
<syntaxhighlight lang="c#">
using Avalonia.Platform.Storage;
using System.IO;
using System.Threading.Tasks;
public class MyClass
{
    public async Task OpenFileAsync()
    {
      var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
      if (storageProvider != null)
      {
          var options = new FilePickerOpenOptions
          {
            SuggestedStartLocation = await StorageProvider.TryGetFolderFromPathAsync($"/usr/local/bin"),
            FileTypeFilter = new[]
            {
                new FilePickerFileType("Text Files") { Patterns = new[] { "*.txt" } },
                new FilePickerFileType("All Files") { Patterns = new[] { "*" } }
            },
            AllowMultiple = false
          };
          var file = await storageProvider.OpenFilePickerAsync(options);
          if (file.Count > 0)
          {  // ファイルが選択された場合の処理
            // ...略
          }
      }
    }
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー