しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

WPF

WPF アプリケーションを Desktop Bridge を使って Windows Store に公開してみた

開発した WPF アプリケーションに対して、簡単にアプリケーションの配布を行いたかったので Windows Store に公開してみました。初めての Desktop Bridge です。今回 Windows Store に公開したアプリケーションは WinQuickLook です。実際に行ったきっかけは…

WPF を使って動画のサムネイルを生成してみた

WPF

かなり久しぶりに WPF を使って動画からサムネイルを作ってみるコードを書いてみました。最初は MediaElement を作って、そのまま RenderTargetBitmap にレンダリングすれば良いかなと思ったんですが、それだと MediaElement 自体の描画が行われないみたいな…

WPF 4 の罠に引っかかった

WPF

ええ、またですよ。今日で 1.5 差し替えと 1.51 公開とかやっちゃいましたよ・・・。本当にごめんなさい。WPF4 ではテキストスタックが新しくなり、その時に TextOptions クラスが追加されて 3 つの添付プロパティが追加されました。今回はその中でも TextRe…

WPF 4.0 のテキスト表示

WPF

.NET 4.0 ベータ 2 が公開されたので、早速インストールして WPF Text Blog にあった挙動を確認していました。 Text clarity improvementsIn previous versions of WPF, all text is formatted without specifically accounting for pixel boundaries. This …

Application.Exit が信用できない

WPF

MiniTwitter は Application.Exit イベントで設定の保存をしてるんですが、どうも最近ユーザーさんが増えてきた関係か設定の保存に失敗するという Tweet を目にするように。どうも Windows Update での再起動やシャットダウン時に MiniTwitter が起動しっぱ…

M-V-VM を勉強中

WPF

とりあえず、自分がなるほど!と思った部分。いやぁ、よく出来てますね。 DelegateCommand と CommandReference DelegateCommand って何のためにあるの?と思ってたんですが、WPF に用意されている RoutedCommand や RoutedUICommand は VisualTree に属して…

ObservableCollection のソート

WPF

Sort メソッドが無いですが、慌てずに CollectionView.SortDescriptions を使いましょう。*1元のコレクションを変更せずにソート、グルーピング、フィルタリングが出来ますよ。最近このキーワードでの検索が多いので書いておきます。 *1:WPF で使う場合のみ

WPF メモ (28)

WPF

ObservableCollection<T> がコンストラクタで List<T> しか取らないことに不満だったんですが、.NET 3.5 SP1 で IEnumerable<T> を取るコンストラクタが追加されていました。ObservableCollection(T) Constructor (IEnumerable(T)) (System.Collections.ObjectModel)L</t></t></t>…

WPF メモ (27)

WPF

FrameworkElement.OverridesDefaultStyle を True にするとデフォルトスタイルが適用されないので、環境に依存することなく同じ表示を実現することができる。のかなぁ?Template を指定していないのに OverridesDefaultStyle = True にすると何も表示されな…

WPF メモ (26)

WPF

便利そうな添付プロパティをメモメモ。 Keyboard.FocusedElement キーボードフォーカスを持つエレメントを取得する KeyboardNavigation.TabIndex そのまんまタブで飛ぶ順番を定義 KeyboardNavigation.IsTabStop タブでの移動対象になるかどうか FocusManager…

定義済みコマンドまとめ

WPF

WPF で最初から定義されているコマンドを整理してみる。 System.Windows.Input 名前空間 ApplicationCommands Open や Save など一般的なアプリケーションで有用なコマンドを持つ ComponentCommands ちょっと特殊。あまり使う機会はないんじゃなかろうか Med…

WPF メモ (25)

WPF

データバインディングの作成で Path を指定せずに ElementName だけを指定すると、そのエレメントのインスタンスをバインドすることができるらしい。

負荷テスト中

WPF

以前のバージョンではタイムラインの項目が多くなると非常に重くなる問題があったんですが、今回の 1.00 + WPF 3.5 SP1 は軽快に動いてくれています。 VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling"…

HLSL メモ

WPF

WPF 3.5 SP1 でシェーダを試したいので、今更ながら勉強しようかと。DirectX 9 High Level Shading Language 入門HLSL を使った上位レベルでのプログラミングA Series on GPU-based Effects for WPF - Greg Schechter's Blog - Site Home - MSDN Blogs追記シ…

BindingGroup を使ってみた

WPF

WPF 3.5 SP1 で追加された BindingGroup を使ってみました。以下サンプルコード。 C# using System.ComponentModel; using System.Windows; using System.Windows.Data; namespace WpfApplication1 { public partial class Window1 : Window { public Window…

WPF 3.5 SP1 メモ

WPF

弄ってみて気になった点をメモメモ。 StringFormat はターゲットプロパティが string の時だけ動く つまり ToolTip には使えない FrameworkElement.ToolTip を隠してやったwww ToolTip に TextBlock を突っ込めば使える BindingBase.StringFormat 以外に…

WPF メモ (24)

WPF

複数のリソースディクショナリを 1 つのリソースディクショナリとして扱うには ResourceDictionary.MergedDictionaries を使う。 <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Common.xaml"/> </ResourceDictionary.MergedDictionaries> <Style TargetType="{x:Type Button}"> </resourcedictionary>

WPF と Main メソッド

WPF

普通に Visual Studio で WPF アプリケーションを開発しようとすると、App.xaml が自動的に作成されて Main メソッドを定義する必要が無くなります。しかし、Main メソッドに付ける必要がある属性*1が使えなくなるので、App.xaml を使わずに Main メソッドを…

WPF とスレッド

WPF

MiniTwitter のタイムライン取得処理を別スレッドで動かすために、方法を改めて調べてみる。 普通に Thread を使う ちょっと捻って ThreadPool を使う スレッドの優先度を設定できない? BackgroundWorker を使う 別スレッドから UI を操作するには Dispatch…

WPF メモ (23)

WPF

TabControl にコレクションをバインドするときには TabControl.ItemTemplate と TabControl.ContentTemplate を使えばおっけー。 <TabControl x:Name="tabControl"> <TabControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=Name}"/> </DataTemplate> </TabControl.ItemTemplate> <TabControl.ContentTemplate> <DataTemplate> </datatemplate></tabcontrol.contenttemplate></tabcontrol>

WPF メモ (22)

WPF

XAML で定義したブラシリソースなどは勝手にフリーズ状態になる。FindResource で引っ張ってきたブラシの IsFrozen を調べたら true になってました。Freezable については MSDN に詳しく載ってます。参考 : Freezable オブジェクトの概要

ほぼ縞模様用だと思う

WPF

id:Yamaki:20080623:1214197217 よりWPF 3.5 SP1 Feature: Alternating Rows - Vincent Sibal's Blog - Site Home - MSDN Blogs.NET 3.5 SP1 Beta の時にそれっぽいことが書いてあったので気になってたんですが、ItemsControl に新しいプロパティを追加する…

StringFormat がやってくる

WPF

Lester's WPF blog : WPF 3.5 SP1 feature: StringFormat3.5 SP1 でデータバインディングでの書式指定サポートが追加されるとありましたが、上記のブログでちょっと詳しい説明を見つけたのでメモしておきます。今は仕方なくコンバータを使って同じことを Min…

ListBox とグループ化

WPF

WPF の ListBox でグループ表示するときには ListBox.GroupStyle を指定しないとグループ名が表示されないらしい。 <ListBox> <ListBox.Resources> <DataTemplate x:Key="GroupHeaderTemplate"> <TextBlock Text="{Binding Path=Name}"/> </DataTemplate> </ListBox.Resources> <ListBox.GroupStyle> </listbox.groupstyle></listbox>

WPF メモ (21)

WPF

テキストボックスで IME のオンオフを切り替えるには InputMethod.IsInputMethodEnabled アタッチプロパティを使う。インテリセンスだけで探すことができたので便利でした。Application.LoadComponent は実行時に Assembly.LoadFrom で読み込まれたアセンブ…

WPF メモ (20)

WPF

ある DependencyObject を持つ Window を取得したい場合は Window.GetWindow を使う。ウィンドウのフックに使いたい場合は HwndSource.FromVisual とかを使ったほうが楽だけど。HwndSource.FromVisual は PresentationSource を返すけど、単純にキャストすれ…

ListBox でダブルクリック

WPF

WPF の ListBox には Click/DoubleClick イベントが存在せず、MouseDoubleClick などしか存在していません。MouseDoubleClick を使えばいいと思いますが、これだと項目以外の場所をダブルクリックしたときにもイベントが呼ばれてしまいます。 検索するとThe …

WPF メモ (19)

WPF

ListBox.ContextMenu に ContextMenu を突っ込むと、各要素*1が ContextMenu の DataContext に入るみたいです。これに気がつかなかったので、前までは ListBoxItem.ContextMenu にスタイルで指定してたんですが、そんな面倒なことしなくてもよかったみたい…

ローカライズは難しい

WPF

前にも何回か書いてますが、WinForm の時と違って WPF のローカライズはなんだか難しいです。XAML で定義している分には LocBaml を使えばサテライトアセンブリを作れるんですが、コード中に埋め込んでいる文字列リテラルはどうしようかなぁと。 XAML 中に S…

コレクションビューとか

WPF

現時点では MiniTwitter のタイムライン表示は ObservableCollection に突っ込む前に List に突っ込んで、それから日付順でソートさせたりしている。しかし WPF には CollectionView という便利なものが存在しているようです。 CollectionView クラスを使え…