間違っている情報があったらすみません。
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 PropertyChangedEventHandlerPropertyChanged; }
使い方
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
Win32API
Vanara.Pinvoke.User32等
GitHub - dahall/Vanara: A set of .NET libraries for Windows implementing PInvoke calls to many native Windows APIs with supporting wrappers.
簡単な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ファイルをダブルクリックし、指示に従って一覧から削除
ライセンスを決める
GNUのやつ さまざまなライセンスとそれらについての解説 - GNUプロジェクト - フリーソフトウェアファウンデーション
Github統計
2015年Open source license usage on GitHub.com | The GitHub Blog
2020年Open Source Licenses in 2021: Trends and Predictions | WhiteSource
頒布前
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につなぐ
すべてをコミット→プッシュ