WPFでのUIアンチエイリアス封じ込め
WPFでのアンチエイリアス封じ込めのために。
Root要素で以下の指定をしておけば大体全部?アンチエイリアスを無効にできる。
RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"
http://blogs.msdn.com/b/hiroyuk/archive/2009/02/16/9425120.aspx
参考。
UseLayoutRoundingプロパティやSnapsToDevicePixelsプロパティも試してみた
が、今ひとつ動作に信用が置けなかったので、他の方法を探していた所発見した
次第。
マップエディタとか、2Dピクセル系のものを作る時に、
アンチエイリアスは邪魔なだけなので、この方が確実。
最近の開発事情
最近はWPFを久々にゴリゴリ書きつつ、
リソース管理用のツールを大々的に作ってる状態。
「モノクロ」時代からの反省を生かしつつ、
今度はできる限りデータ抽象をきっちり作って、
コンテンツは全部ツールの方で弄ろうという魂胆。。。
ついでにエフェクトエディタとかイベントスクリプト用のエディタとか、
色々作ってしまおうという狙いもあるけども。
MarbleTownsに限らず、今後色々使えそうだし。
ということで少し先のことも考えつつ、
UI要素とか、細かい部分からじっくり作ってる状況。
その「先」がどの程度あるのかってのは、
あまりアテにならない読みに基づくので信用できませんがね!
しかし本当に時間食いな趣味だよ。
UserControlの継承めも
自前のUserControlを継承して、
派生のUserControlを作りたい時に。
基底クラスのコードをoverrideして独自処理にしたりとか。
基本的なやり方は、
http://d.hatena.ne.jp/kent013/20091129/1259482727
http://d.hatena.ne.jp/okazuki/20091025/1256472760
http://csfun.blog49.fc2.com/blog-entry-42.html
この辺りのページが参考になる。
基本的には、新しくUserControlを追加して、
XAML側のルート要素を
<local:MyUserControl x:Class="ProjectName.FolderName.ClassName" 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:MyNameSpace" mc:Ignorable="d" > </local:MyUserControl>
みたいな感じで、local:MyUserControlに変更。
その上で、xaml.csファイルのクラス定義で、基底クラスを
自分で作ったUserControlのクラスに置き換える。
ただしこのままコンパイルしても怒られる*1。
なので、xamlファイルのプロパティにある、
「ビルドアクション」を"Page"から"Resource"に変更する。
これでg.csファイルが自動生成されなくなる様子。
自分の環境の場合、これでコンパイルが通った。
今のところ弊害は出ていない模様。
http://csfun.blog49.fc2.com/blog-entry-42.html
にあるような、InitializeComponent()の修正はしていない。*2
(このあと問題が起きなければ)これでUserControlの派生、量産が大分やりや
すくなる。
これとWPFのTemplate機能を組み合わせれば、更に柔軟性・拡張性が上がる気が
する*3。
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_04/uiframework_04_02.html
Templateの中にイベントハンドラを埋め込む方法については、
http://pro.art55.jp/?eid=1046821
この辺が参考になりそう。後で試してみる。上手く行ったら後で纏める。