12月 022015
 

概要

一般的に、private setter を持つプロパティを TwoWay Binding すると、InvalidOperationException が発生して死ぬ。
しかし、ターゲットフレームワークが 4.5 の時のみ、何事もなかったかのように動作する。なにそれ……

※ OneWayToSource の場合も同様。

Continue reading »

9月 032015
 

条件をよく忘れるのでメモ。

条件

  • ItemsPanelVirtualizingPanel であること
    • だいたい VirtualizingStackPanel
  • VirtualizingPanel.IsVirtualizingTrue (既定値) であること
  • ScrollViewer.CanContentScrollTrue であること
    • 既定値は False
  • グループ化してる場合は VirtualizingPanel.IsVirtualizingWhenGroupingTrue

ListView なんかは初めから仮想化有効だけど、Template 弄る時なんかに無効化されてしまったりするので注意

既定値が気に食わないやつとか

  • VirtualizingPanel.VirtualizationModeRecycling
    • 使いまわしたほうがパフォーマンス良い
  • VirtualizingPanel.ScrollUnitPixel
    • 既定値の Item はスクロールしてる感乏しい
    • タッチだとカクカクしてなおさらキモい

サンプル

<ItemsControl VirtualizingPanel.IsVirtualizing="True"
              VirtualizingPanel.VirtualizationMode="Recycling"
              VirtualizingPanel.ScrollUnit="Pixel">
    <ItemsControl.Template>
        <ControlTemplate>
            <ScrollViewer PanningMode="Both"
                          VerticalScrollBarVisibility="Auto"
                          HorizontalScrollBarVisibility="Auto"
                          CanContentScroll="True">
                <ItemsPresenter />
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
8月 112015
 

とりあえず簡単に。
ちゃんとしたのはそのうち気が向いたら書くかも。
でも既存開発者はわかってる人たちだからこれでも十分な気が……

新規開発も追々。
むしろちゃんと書くべきはこっち。。

KanColleViewer 4.0

KanColleViewer 4.0 がリリースされましたが、プラグインシステムが刷新されたため、3.x のプラグインは利用できなくなりました。

Release version 4.0 · Grabacr07/KanColleViewer

プラグイン システムの刷新 (version 3.8.2 またはそれ以前に向けて作られたプラグインは使用できなくなります)

というわけで、3.x プラグインをどう移行すればいいかを 雑に 簡単に説明します。

実際のコードは、本体に付属しているプラグインの実装などを参考にすると良いでしょう。

Continue reading »

5月 142015
 

結論

グループ化したい時はControlTemplateItemsPresenterを使わないとダメっぽい

やりたかったこととか

また、ItemsPanel を指定せず、前述の ControlTemplate でコレクション項目の並べ方を指定する方法もあります。ControlTemplate 内に ItemsPresenter を配置する代わりに、Panel の派生クラスを指定し、IsItemsHost プロパティに True を設定します。

のだけども、グループ化して表示したい場合うまく表示されない。

  • こうしたかった
  • が、こうなる

※実際やりたかったこととは違うけど例なので……

Continue reading »

6月 132014
 

WPFにてアクティブなウィンドウが無い状態で引数のownerを指定せずにMessageBox.Show()した場合、メッセージボックスは非モーダルな状態で表示される。
通信等をトリガーにして通知を行う場合などで発生するケース。

参考: MessageBox.cs

モーダルな状態で表示するには、Window.Activate()でウィンドウをアクティブにしてしまうか、MessageBox.Show()の引数でownerとなるWindowを指定すれば良い。