めも

主にUnity

ソフトウェアあれこれ

間違っている情報があったらすみません。

nuget

ライセンスは全てMITと思われるが、間違っている/古い 情報かもしれないので各自参照してください。(06/12)

wpf

・PropertyChanged.Fody
GitHub - Fody/PropertyChanged: Injects INotifyPropertyChanged code into properties at compile time
導入方法
FodyWeavers.xml

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <PropertyChanged />
</Weavers>

MainWindowViewModel.cs

class MainWindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}

使い方
MainWindow.xaml

<TextBlock Text="{Binding Text1}"/>

MainWindowViewModel.cs

public string Text1 {get;} = "text1"


一般的なcollectionの内部代入には対応していないのでcollectionを使いたいときはObservableCollectionを使うとよい。

using System.Collections.ObjectModel;
    class MainWindowViewModel : INotifyPropertyChanged{
        public ObservableCollection<string> ItemSource { get; set; }
    }


・Singulink.WPF.Data.MethodBinding
GitHub - Singulink/Singulink.WPF.Data.MethodBinding: Allows binding events directly to methods, including passing custom parameters.
Net Framework 系では使えないことがあるので注意、Net 5.0で動作確認。

使い方

<Window 
(中略)
xmlns:s="http://schemas.singulink.com/xaml"
(中略)
>
<Button Content="Execute" Click="{s:MethodBinding (メソッド名), (変数),(変数)...}" />


・Prism.Wpf

ViewModelが使えるようになる(よくわからない)

後入れ方法
(テンプレートがNet5.0に対応していないので後入れ推奨)
1.Models,ViewModels, Views(folder), ViewModels/MainWindowViewModel.cs, Models/MainWindowModel.csを作る
2.MainWindow.xamlをViewsに移動
3.App.xamlを変更

             StartupUri="Views/MainWindow.xaml">

4.MainWindow.xamlに以下を追加

<Window x:Class="(名前空間).Views.MainWindow"
(中略)
        xmlns:prism="http://prismlibrary.com/"
        xmlns:vm="clr-namespace:(名前空間).ViewModels"
        prism:ViewModelLocator.AutoWireViewModel="True"
(中略)
>

5.Prism.Wpfをnugetでインストール

グラフ

oxyplot

Json(セーブに使う)

System.Text.Json

簡単なInput simulation/capture

WindowsInput
GitHub - MediatedCommunications/WindowsInput: Capture and Simulate Keyboard and Mouse Input

await WindowsInput.Simulate.Events().Click(KeyCode.A).Wait(100).Release(KeyCode.A).Invoke();
using (var keyboard = WindowsInput.Capture.Global.KeyboardAsync())
{
    keyboard.KeyEvent += keyboard_KeyEvent;
}

数学

MathNet.Numerics
Math.NET Numerics

cofd

WindowsAPICodePack-Shell

var downloadFolderPath = KnownFolders.Downloads.Path;
CommonOpenFileDialog cofd = new(){ IsFolderPicker = true, };
var folderPath = downloadFolderPath
if (cofd.ShowDialog() == CommonFileDialogResult.Ok)
{
folderPath = cofd.FileName;
}

MethodBinding / EventBindingについて、他のやつ

・MvvmCross.Plugin.MethodBinding
Ms-PL!!!!!
MvvmCross/MvvmCross.Plugins/MethodBinding at develop · MvvmCross/MvvmCross · GitHub

・EventBinder
2回呼ばれてしまう(よくわからない)
GitHub - Serg046/EventBinder: Allows binding a method to any WPF/Avalonia event

使い方
1.MainWindowViewModel.csをpublicにする
2.MainWindow.xaml

<Window 
(中略)
xmlns:e="clr-namespace:EventBinder;assembly=EventBinder"
(中略)
>
<Button Content="Execute" Click="{e:EventBinding (メソッド名), (変数),(変数)...}" />

・EventBindingMarkup
こっちはdelegateを介するやつ。nugetで入れられない…
GitHub - JonghoL/EventBindingMarkup: Markup Extensions for Events (WPF 4.5)

その他
Search · event bind wpf · GitHub

以下2つは名前空間名がありふれていない場合に使えるテクニック

めんどくさい!簡単なテンプレートの作り方

1.名前空間を選択してCtrl+H
2.

$safeprojectname$

でソリューション全体を置換
3.プロジェクト(P)→テンプレートのエクスポート(E)...→...
おわり

プロジェクト名の変更

1.名前空間を選択してCtrl+H、ソリューション全体を置換
2.プロジェクト(P)→(プロジェクト名)のプロパティ→アセンブリ名、既定の名前空間を変更
3.csproj名を変更
4.ソリューション名を変更
5.visual studioを終了し、フォルダ名を変更
6.slnファイルをメモ帳で開き、フォルダ名を修正
7.slnファイルをvisual studioで開く
8.visual studioを開き、前のプロジェクト名のslnファイルをダブルクリックし、指示に従って一覧から削除

頒布前

Releaseビルドをする。

pdbファイル、不要なフォルダの削除

pdbファイルには絶対パスが書かれていることがあるため、自身のPCのユーザー名が公にさらされてしまう。そうでなくとも、pdbファイルは実行には不必要だから、削除したほうが良い。

コマンドライン

del "$(TargetDir)*.xml"
del "$(TargetDir)*.pdb"
rd /s /q "$(TargetDir)de"
rd /s /q "$(TargetDir)en"
rd /s /q "$(TargetDir)es"
rd /s /q "$(TargetDir)fr"
rd /s /q "$(TargetDir)hu"
rd /s /q "$(TargetDir)it"
rd /s /q "$(TargetDir)ko"
rd /s /q "$(TargetDir)pt-BR"
rd /s /q "$(TargetDir)ro"
rd /s /q "$(TargetDir)ru"
rd /s /q "$(TargetDir)sv"
rd /s /q "$(TargetDir)cs-CZ"
rd /s /q "$(TargetDir)ja-JP"
rd /s /q "$(TargetDir)zh-Hans"
rd /s /q "$(TargetDir)zh-Hant"

ビルド後イベントの実行(N): 常に行う

dllの場所を変更

exeを見つけやすくするため、dllを全てlibsフォルダ内に入れる。
コマンドライン

mkdir "$(TargetDir)\libs"
move "$(TargetDir)*.dll" "$(TargetDir)\libs"

App.config

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="libs" />
    </assemblyBinding>
  </runtime>
</configuration>

ビルド後イベントの実行(N): 常に行う

githubにつなぐ

すべてをコミット→プッシュ