Javascript External Library

2021-03-21

【XAML】TextboxでEnter入力をBindする

<TextBox Text="{Binding InputText, UpdateSourceTrigger=PropertyChanged}">
  <TextBox.InputBindings>
    <KeyBinding Gesture="Enter" Command="{Binding EnterText}" />
  </TextBox.InputBindings>
</TextBox>

TextBox.InputBindings で Input 操作を取得する
KeyBinding で Enter を Bind して ICommand を実行する

注意点は
UpdateSourceTrigger = PropertyChanged
で、Text プロパティのバインドを PropertyChanged としておくこと、既定は LostFocus なので Enter 操作時に Text に Bind した要素が更新されない。




2021-03-20

【あつ森】海の幸図鑑コンプリート

色々と忙しくてプレイするのを忘れてましたが、3月になったので海の幸もコンプリートできました。

3月に出現する最後の海の幸は「タカアシガニ」と「ホタルイカ」です。
タカアシガニは一日中捕獲可能なので最後はホタルイカになりました。

博物館に寄贈して美術品以外はコンプリートです。

図鑑はきれいに埋まりました。

美術品はランダム要素が強すぎるので諦めよう。

2021-03-13

WPF で透過アプリケーションを作る

Windows 7以降、アプリケーションごと透過できるようになりました。普段は特に必要ない機能ではありますが、常駐の情報表示アプリケーションなどでは便利な場面もあります。

xmalだけでやろうとするとだいたいこんな感じ
<Window x:Class="Lutheta.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        ShowInTaskbar="False"
        WindowStyle="None"
        AllowsTransparency="True"
        Left="200" Top="200" Height="480" Width="640">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
      <i:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" MethodName="DragMove" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
  <Window.Style>
    <Style TargetType="Window">
      <Setter Property="ResizeMode" Value="NoResize" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsActive}" Value="True">
          <Setter Property="ResizeMode" Value="CanResizeWithGrip" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Window.Style>
  <Grip />
</Window>

要点は次のような感じです。
  • ShowInTaskbar="False"
    タスクバーに表示しない
  • WindowStyle="None"
    ウィンドウ枠を表示しない。最小化なども表示されなくなります。
  • AllowsTransparency="True"
    透過を許可する
  • Window.MouseLeftButtonDown event で Window.DragMove method する
    マウス左ボタン押下時にウィンドウを移動できるようにする
     xmlns:i="http://schemas.microsoft.com/xaml/behaviors" が必要
  • Window.IsActive の値によって Window.ResizeMode を変更する
    アクティブ状態になったときにサイズ変更用のGripマーカーを表示する
    非アクティブ状態のときは表示しないようにするほうが見栄えがいい
以上です。

MVVM だと xaml.cs にはなるべく手を入れたくないので、 xaml で完結させました。

2021-03-07

.NET 5 への移行

.NET 5 SDK をインストールする

ダウンロードしてインストールする。
まあ、これ忘れることはないと思う。

.NET Core 3 から .NET 5 へ

ターゲットフレームワークを変更する。

ちなみに、名前順なのか「.NET Core 1.0」よりも上にある。

プロジェクトファイルは次のような感じになる。
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net5.0-windows</TargetFramework>
  </PropertyGroup>
</Project>

TargetFrameworkは自動で変換してくれるが、ProjectタグのSdk属性は手動で変えないといけない。

コンパイル場所の既定は「bin/Debug/net5.0-windows」となる。もう深すぎてめんどくさい。いい加減発行手順の手抜きはするなということかなあ。

Xamarin.Forms 5.0 にする

これは必須ではないんだけど、Xamarin.Forms 5.0も使えるようになった。
これも.NET 5と同様に使っていきたい。
注意が必要なのはAndroidXしか使えないこと。Android.Supportからの移行が必要になります。
また、最小APIが29となる。OSだとAndroid 10となるので、旧いスマホは要注意となる。というか、旧いスマホのOSのバージョンアップができないのは端末を買ってるのにおかしいと思う。所有権じゃなくて使用権でも売ってるつもりかよ。

移行方法の詳細はMicrosoftがDocsで発表している。

Azureをつかう

Azure Web Apps は現段階で .NET 5 はEarly Accessとなっている。
利用に大きなトラブルはないようだが、利用は自己責任の範囲が大きくなるので責任あるアプリケーションのバージョンアップは避けておいたほうがいいと思う。

Azure Functions は.NET 5は未対応。
全く動かない。少しも動かない。エミュレータすらも動かない。
しかも、コンパイルできるのに動かないと来たもんだ。
githubのissueでも論争が繰り広げられているのですが、「対応未定」とか「対応中」とかそういう次元ではなく「対応しない」予定らしい。
Azure Functions はバージョンアップしてはならない。私はやってしまったので後で戻さないと・・・

まとめ

特に大きな作業の必要なくバージョンアップ自体はできると言えます。
ただし、Azureを利用するものはしばらく様子見をすることを推奨します。

2021-03-06

第2次緊急事態宣言の影響 その3

私が住む首都圏だけ緊急事態宣言が延長されてしまいました。
経緯的に演出だけの無能知事に振り回されているだけな気もしますが、そもそも悪いのは無能知事ではなく支那人なので、無能知事は別にいいや。

今回の再延長によって問題となったのは13日の函館行きですね。しかも、18きっぷ旅行の予定だったので残りの旅行もキャンセルしないといけなくなりました。影響は大きいですね。18きっぷは使い切らないともったいないですしね。一部消費したきっぷを故買屋から購入することも考えたのですが、なんとなく他人の使いさしを利用するのが嫌なんですよね。

ところが、キャンセルしようとカレンダー見ているととある事に気が付きました。
春の18きっぷって4月10日まで使えるから5日分使えるのでは・・・?

日程変更にしよう。休日休まなくていいのかとか、退職者が出て上司が派遣ガチャはじめたとかは気にしない。私は旅行に行くんです。

2021-03-04

Google Code Prettify

ソースコードをブログに貼るのは難しい。
エンジニアをしていて後で見やすいように掲載しておきたいのだけど、どうしたものだかと悩んでいました。
調べてみるとGoogleがGoogle Code Prettifyという名称でJavascriptの整形ライブラリを公開していることがわかりました。
早速利用してみることにしました。

まずはライブラリを読み込みます。
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>

ついでに既定でイマイチな部分を補正

長くなったときにスクロールする
.prettyprint ol{ overflow: auto; }
行番号を毎行表示する(既定は5行ごと)
.prettyprint ol.linenums > li {list-style-type: decimal; }

あとはpreタグでソースを囲む
<pre class="prettyprint linenums lang-html"></pre>

言語は自動判定もしてくれるけど、指定したほうが無難

c#もこの通り
using System;
namespace Lutheta
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
        }
    }
}

bloggerだとpreタグはHTMLビューでないと指定できないことと、HTMLなのでソースをエスケープしないと駄目な点が面倒です。
しかし、これで見やすい感じにソースが掲載できるようになりました。