どうも、もりもりです。
前回は
.NETでSPA(SinglePageApplication)を実現できるWebフレームワークの
BlazorWebAssemblyでTodo画面を作成しました。
今回はMatBlazorを使って、そのTodo画面をマテリアルデザインにしてみました。
MatBlazor使ったらどうなるの?
こんな感じの画面が
こんな感じの画面になっちゃいます。
ソースコードは下記に置いてます。
前準備
まずは前準備としてMatBlazorのパッケージを追加し、使用できるように設定していきます。
◆ パッケージの追加
下記のコマンドでパッケージを追加します。念のためcsprojに追加されていることを確認しておきましょう。
◆ _imports.razorを編集
下記を追加します。
_imports.razor
◆ wwwroot/index.htmlを編集
下記を追加します。
index.html
これで準備は整いました。
Todoアイテム入力欄
ここではチェックボックス、入力欄、ボタンにMatBlazorを使用しています。
TodoMat.razor
MatBlazorのドキュメントに使用例がたくさん載ってるのでさらっと説明を。
◆ MatCheckbox
チェックボックスのコンポーネント。前回作成したTodo画面では入力欄のとこにチェックボックスを付けてなかったのですが追加しました。
Name |
Description |
@bind-Value |
バインドする値。true / false |
Disabled |
無効にするかどうか。true / false |
@bind-Value
には、プロパティallCheckedをバインド。
コメントの通りです。
Disabled
には、メソッドTodoItemExists()の戻り値をバインド。
TodoMat.cs
◆ MatTextField
テキストフィールドのコンポーネント。
Name |
Description |
@bind-Value |
バインドする値。入力した値を保持。 |
Label |
入力項目名。今回はPlaceholder的な使い方してます。 HelperTextというのが別に用意されているので本来はこちらの方がいいのかな? |
OnKeyDown |
キーダウンイベント。 |
OnInput |
入力イベント。 |
ただ1個だけ面倒だったのがあります。
MatTextFieldのLabel
「What needs to be done?」の文字の位置。
CheckBoxとTextFieldを重ねてるので入力内容はStyle属性で
paddingを指定してやればズラせたのですが
Label
の文字位置は用意されてる属性では触れそうになかったので
Styleを強引にイジってます。(上記ソースの4-6行目)
これが正解なのかどうかわかりませんがまたどっかで時間作って確認してみます。
◆ MatButton
ボタンのコンポーネント。
Name |
Description |
OnClick |
クリックイベント。 |
Outlined |
ボタンの枠を表示するかどうか。 |
Todoアイテムリスト
リスト用コンポーネント。MatListとMatListItemを使用してます。今回はStyleのみ指定。
TodoMat.razor
MatListItem内ではMatCheckboxとMatStringFieldを使用しています。
MatStringFieldはMatTextFieldと違ってString型専用のコンポーネントっぽいです。
MatTextFieldはintやDateTimeなどの型がバインドできます。
◆ MatStringField
String専用の入力用コンポーネント。
Name |
Description |
InputClass |
input要素のCSSクラス。 |
Styleに「completed-todo-item」を用意し、InputClass
に
チェック状態によって異なるStyle名を返すメソッド「GetCompletedTodoItemCssClass()」をバインドしています。
TodoMat.cs
リスト下のボタン群
ボタン用のコンポーネント。
TodoMat.razor
TodoMat.cs
さいごに
使ってみた感じ、CSSの知識がない人にとっては嬉しいとは思いますが
Webの知識がある人からすると物足りなさそうな感じがします。
ちょっと細かいことに拘るとCSSの知識も必要になってきます。
ドキュメントはわかりやすかったのですんなり使えました。
他にもBlazor向けのコンポーネントで良さそうなのがあったらまた紹介したいと思います。
以上、もりもりでした。