提督業プラグインを作ってみよう(1)とりあえずウインドウを出そう

1.プロジェクトを作ろう

メニューから「新規作成」「プロジェクト」を選んで、「WPFユーザーコントロールライブラリ」を選びます。プロジェクト名は適当なものを入力しておいてください。

f:id:reniris:20180905192254p:plain

2.余計なファイルを消してプロジェクト構造を整理しよう

作成したプロジェクトから

f:id:reniris:20180905193235p:plain

UserControl1.xamlを削除して「Models」「Views」「ViewModels」フォルダを追加します。

f:id:reniris:20180905205757p:plain

3.Nugetから必要なライブラリをインストールしよう

KanColleViewer.Composition(必須) KanColleViewer.PluginAnalyzer(ほぼ必須) KanColleWrapper(艦これの情報を取るなら必要) LivetCask(この連載では使います) をNugetからインストールしましょう

4.プラグイン本体を実装しよう

プロジェクト直下にクラスファイルをひとつ、Viewsフォルダにユーザーコントロールひとつと、ウインドウひとつ、ViewModelsフォルダにクラスひとつを追加します。

メインの情報表示ユーザーコントロール(まだ空)

<UserControl x:Class="プロジェクト名.Views.Information"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:プロジェクト名.Views"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
            
    </Grid>
</UserControl>

メインのウインドウ(Informationが入っているだけ)

<Window x:Class="プロジェクト名.Views.InformationWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:プロジェクト名.Views"
        mc:Ignorable="d"
        Title="InformationWindow" Height="450" Width="800">
    <local:Information/>
</Window>

メインのViewModel(まだ空)

class InformationWindowViewModel : Livet.ViewModel
{
    public InformationWindowViewModel()
    {

    }
}

プラグイン本体

class Plugin : IPlugin, IDisposable
{
    private Views.InformationWindow info;  //メインのView
    private ViewModels.InformationViewModel infovm;    //メインのViewModel

    public Plugin()
    {
    }

    //プラグインが読み込まれたときに呼ばれる
    public void Initialize()
    {
        infovm = new ViewModels.InformationViewModel();
        info = new Views.InformationWindow
        {
            DataContext = infovm
        };
        info.Show();
    }

    public void Dispose()
    {
        //ここに終了時の処理を書く
    }
}

ソースはブログに乗せるために余計なものを省いています。 これらのソースをいい感じに修正してビルドしたdllをKanColleViewerのPluginsフォルダにコピーすると、空っぽのウインドウが出るようになります。

参考サイト

KanColleViewer プラグインの作り方とか – CAT EARS

艦ぶらっぽい提督業プラグインを作ってみた

艦これ二期は画面がでっかくなってキレイになりましたが、私の環境でKanColleViewerだとメインのブラウザ部分がほとんどを占めてしまい、他がさっぱり見えません。 そこで、今は亡き艦ぶらのようなコンパクトで見やすい艦隊情報ウインドウを出すというプラグインを作りました。 プラグイン本体とソースはGitHubで公開しています。 github.com

次の記事でKanColleViewerプラグインの作り方について書きます。

艦これ専ブラ2期対応できるかな?(IE以外のブラウザコンポーネントについて)

ほとんどの艦これ専ブラにはIEコンポーネントが使われていますが、2期ではIEが非対応になったので、専ブラは壊滅状態です。
そこで、IE以外のブラウザコンポーネントについて調べてみました。
Chrome(おすすめ)
github.com
使い方
qiita.com

FireFox(ちょっと古い)
github.com

Edge(Windows 10 1803以降にしか対応してない)
blogs.windows.com
使い方
www.atmarkit.co.jp

参考URL
Embed Firefox/Gecko in WPF/C# - Stack Overflow
https://www.codeproject.com/Questions/611755/Embed-Chrome-or-firefox-Browser-in-Csharp-net-Form

プロジェクトで使っているNuGet パッケージのライセンスを一覧する

NuGet パッケージのライセンスをまとめて確認するとき、Package.configの場合は
pronama.azurewebsites.net
でできますが、PackageReferenceには対応していません。

そこで改造してPackageReferenceに対応させました。
コンソールアプリの動作確認はできたのですが、拡張機能のほうは理論上動くはずなのですが、こちらの環境では動きません。

ソースはGitHubで公開しています
github.com
フォーク元にissue投げてるけど、取り上げてくれるかどうかは不明。

インデクサをIObservable<T>に変更する拡張メソッド書いた

作ってるアプリに必要そうなので書いたけど、いらなくなったので供養
インデクサをIObservable<T>に変更できるよ。需要は知らない。


インデクサをIObservable<T>に変更する拡張メソッド

Xamarinで多言語対応するよ

過去の自分のコードを参考にして多言語対応しようとして苦戦したからメモするよ。

言語の変更がうまくいかない、インデクサの変更が伝わっていないのでは?

RaisePropertyChanged("Item")を追加

やっぱりうまくいかない

ResourceServiceにINotifyPropertyChanged継承させてなかったよ・・・

よいこのみんなはINotifyPropertyChangedの継承を忘れちゃダメだよ。
悪い子はもっと悩めばいいよ

悪戦苦闘したけど何とかうまくいったプロジェクトはGitHubで公開してます。
github.com

ReactivePropertySlimをMessagePackに対応させてみた(改)

ReactivePropertySlimをMessagePackに対応させるためのカスタムリゾルバを書いたよ
ReactivePropertyの修正がきたから書き換えたよ(2018/4/24更新)


ReactivePropertySlimResolver