トップページtech
1001コメント271KB

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/05/30(木) 20:12:06.20
ユーザーインターフェースシステム、Windows Presentation Frameworkについて微に入り語るスレ。

Visual Studio 2012 & 2010
http://www.microsoft.com/visualstudio/jpn/downloads
Microsoft .NET Framework 4 (Web インストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=9CFB2D51-5FF4-4491-B0E5-B386F32C0992&;displaylang=ja
Microsoft .NET Framework 4 (スタンドアロンインストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&;displaylang=ja
Microsoft .NET Framework 4.5
http://msdn.microsoft.com/ja-jp/library/vstudio/5a4x27ek.aspx

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part15
http://toro.2ch.net/test/read.cgi/tech/1359863558/

関連スレ
Microsoft Silverlight その9
http://toro.2ch.net/test/read.cgi/tech/1321150267/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0079デフォルトの名無しさん2013/06/15(土) 22:18:33.40
>>73
仕事なら金払って業者に訊けよハゲ
0080デフォルトの名無しさん2013/06/15(土) 23:19:20.87
>>76
はぁ? って返したくなるな。
今じゃWPFの方が色んな意味で無難だろ。
0081デフォルトの名無しさん2013/06/15(土) 23:20:11.21
これこれ自分の立場でしかものを考えられない
0082デフォルトの名無しさん2013/06/15(土) 23:21:25.11
>>78
簡単だよー。WinRT より機能が多い分、どう作るのが良いのかは分かり辛いけど。
0083デフォルトの名無しさん2013/06/16(日) 09:55:05.99
WPFのベクタグラフィックってatomのGPUでもちゃんと動くもんなの?
なんか円表示するだけですげー重いんですけど・・・
ソフトの作りが悪いのかベクタ処理自体が重いのか判らない
0084デフォルトの名無しさん2013/06/16(日) 10:00:37.60
質問させてください。
VisualStudio2012からRibbonコントロールが標準(System.Windows.Controls.Ribbon.dll)に
なったということで使用してみました。
<RibbonButton>のLargeImageSourceに画像を設定して、ボタンの
アイコンを表示してみたのですが、画像アイコンの表示が
汚いです。
(表示される画像のエッジ部分がガタガタして、アンチエイリアスがかかっていない?)
綺麗に表示するためにはどうしたら良いのでしょうか?
宜しくお願いします。
0085デフォルトの名無しさん2013/06/16(日) 10:42:41.40
サイズがおかしいんじゃねーの
つーか画像に勝手にアンチエイリアスなんてかけられたら嫌だろハゲ
0086デフォルトの名無しさん2013/06/16(日) 10:53:23.09
ゆとりグラマーが多いんだよ
0087842013/06/16(日) 12:29:52.23
>>85
回答有難うございます
<RibbonButton>のLargeImageSourceに設定する画像の
最適なサイズ、解像度について教えて頂けないでしょうか?
<Button>に画像を設定して表示する場合は、スムーズに表示されます。
<RibbonButton>でも同じように表示したいです。
0088デフォルトの名無しさん2013/06/16(日) 12:34:13.22
RibbonImageSize
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.ribbon.ribbonimagesize.aspx

ここ読めやぁ
0089デフォルトの名無しさん2013/06/17(月) 11:10:38.94
WPFのTextboxなのですが、デフォルトでIMEがONになっていて
日本語入力モードになってしまいます。
IMEを無効にはできたのですが、デフォルトでIMEをOFF状態に
できなくて困っています。どうしたものでしょうか?
0090デフォルトの名無しさん2013/06/17(月) 11:16:34.79
困ってないだろ。1個1個設定したらいい。なにも問題はない
0091デフォルトの名無しさん2013/06/17(月) 11:36:55.15
すみません。ウィルスのせいでした。
0092デフォルトの名無しさん2013/06/17(月) 11:40:14.00
>>89

スタイルで設定すれば、Window内の全てでも、アプリ内の全てでも、
範囲はスタイルを置く場所次第だな

<Style TargetType="TextBox">
  <Setter Property="InputMethod.IsInputMethodEnabled" Value="False"/>
</Style>
0093デフォルトの名無しさん2013/06/17(月) 13:01:42.59
ありがとうございます。
どうもWPFのバグっぽいです。
XPの場合にloadedイベントでtxtbox.focus()をすると
そのtextboxがIMEオンになってしまいます。
7の場合はIMEオンになりません。これはあきらかにWPFのバグですね。
0094デフォルトの名無しさん2013/06/17(月) 18:55:24.08
Buttonコントロールのフォーカスを利用した処理をしようとしています。

Buttonを2つ置き、それぞれの名前を btn_a, btn_b とします。
2つのボタンには LostFocus() イベント発生時に処理をするように
btn_a_LostFocus() 関数と btn_b_LostFocus() 関数を設定します。

ここで、btn_a, btn_b は、
 ・ボタンからフォーカスが外れた時に処理をしたい
 ・ただし、btn_a ×N回 と btn_b ×M回 を交互に押している場合には
  処理は実行しない
としたいです。
btn_a, btn_b を、↑ボタン、↓ボタンとすると、↑と↓をポチポチ押している時は
処理はせず、別のコントロールにFocusが移った時に処理をしたい、という感じです。

以下のように書きましたが、if文の中に入ってしまい
希望の動作となりませんでしたが、どのように書けば良いのでしょうか。

private void btn_a_LostFocus(object sender, RoutedEventArgs e) {
if (!btn_b.IsFocused) {
// 処理(btn_aを押してからbtn_bを押すと、ここに入ってしまう)
}
}

宜しくお願いします。
0095デフォルトの名無しさん2013/06/17(月) 19:28:24.83
いまいち何がしたいのか文章理解できなかった
0096デフォルトの名無しさん2013/06/17(月) 19:33:32.57
AでもBでもないところにフォーカスが移ったら処理したいんだろ
生き写しのルール文章みたいだ
0097942013/06/17(月) 20:02:29.45
>>95
確かに分かりにくい文章でした。すみません。

>>96
はい。AでもBでもないところにフォーカスが移ったら処理したいです。
0098942013/06/17(月) 20:12:13.30
条件に「キーボードのフォーカス」も追加したら、
希望の動作になりました。
IsFocused はなくても十分なのかもしれませんが、
これから検証します。お騒がせしました。

private void btn_a_LostFocus(object sender, RoutedEventArgs e) {
if (!( btn_b.IsFocused || btn_b.IsKeyboardFocused )) {
// 処理
}
}

private void btn_b_LostFocus(object sender, RoutedEventArgs e) {
if (!( btn_a.IsFocused || btn_a.IsKeyboardFocused )) {
// 処理
}
}
0099デフォルトの名無しさん2013/06/17(月) 20:40:10.73
なぜか知らないがクソアプリだと分かってしまったわ
0100デフォルトの名無しさん2013/06/17(月) 20:45:14.60
読みたくねーコードだな
0101982013/06/17(月) 21:14:24.93
>>99-100
コメントありがとうございます。
またお願いします。
0102デフォルトの名無しさん2013/06/18(火) 07:29:48.62
>>94

Aボタン・Bボタンの上から
マウス外すつもりがなくても外れちゃった、
なんてことは毎日百回単位で発生しそうだから
(普通は単純に無視されて何も起きないから気づかないだけ)
普通のアプリとかだとそれ、操作性最悪になりそうだけどな。
ユーザーが意図しない処理実行が多発しそうだ。

操作にゲーム性を求めてるとか、
実行したい処理が間違って実行しても問題ない処理とか
そういう場合は例外だけど。
0103デフォルトの名無しさん2013/06/19(水) 00:29:11.30
WPFのプロジェクト内にhtmlファイルを置いて
それを実行したいのですが、どうすれば良いでしょうか。

プロジェクトの構成:
 ProjectName
    +-- help ヘルプフォルダ
  +--- help.html  ヘルプファイル


呼び出し:
Process.Start("help\\help.html");

例外、ファイルが見つかりません。となります。
0104デフォルトの名無しさん2013/06/19(水) 05:00:19.86
パス通ってないフォルダなら、フルパス名で指定しないと。
0105デフォルトの名無しさん2013/06/19(水) 05:16:30.34
help ならexe直下に普通に置いておいても良いような…
0106デフォルトの名無しさん2013/06/19(水) 07:35:05.87
そもそもWPFの話題じゃない
0107デフォルトの名無しさん2013/06/19(水) 08:25:56.26
Process.Startって、関連付けされてるのを勝手に起動してくれるのか。
それは知らんかった。
0108デフォルトの名無しさん2013/06/19(水) 12:04:09.72
>>103
htmlが実行ファイルのあるフォルダ以下にコピーされてないから
0109デフォルトの名無しさん2013/06/19(水) 17:14:31.75
WPFの話をしよう
0110デフォルトの名無しさん2013/06/19(水) 21:07:09.20
じゃあWPFからchmファイルを開く場合はどう書くの?
ほら、WPFの話だよ。
0111デフォルトの名無しさん2013/06/19(水) 21:21:36.19
死ね
0112デフォルトの名無しさん2013/06/19(水) 22:57:46.54
>>111
うわぁ…
0113デフォルトの名無しさん2013/06/20(木) 20:23:03.61
WPFからchmファイルを表示する方法って質問しちゃダメなの?
俺も知りたいんだが。。。
0114デフォルトの名無しさん2013/06/20(木) 20:26:54.08
ため息しか出ないな
面白いと思ってんのか糞厨房
01151332013/06/20(木) 20:44:04.64
あ、できたから良いや。
特にやり方書かなくても良いよね。

>>114
ため息ってどういう時に出るのか知ってる?
バカなんだなぁ。頑張ってね。
01161152013/06/20(木) 20:44:38.34
未来人になっちゃったw
おっちょこちょいだなぁ。
0117デフォルトの名無しさん2013/06/20(木) 22:52:07.59
>>116
2ch初心者なんだろうけど
その都度のレス番じゃなく最初のレス番を入れたほうがいいよ

最近どこかのスレでも似たようなことしてる人いたなあ
0118デフォルトの名無しさん2013/06/20(木) 23:51:02.17
クルクルパーは饒舌だね
0119デフォルトの名無しさん2013/06/21(金) 02:37:46.79
>>117
名前にどのレス番を入れるのかは合によりけりでしょう。
あなたの考える「人の使い方」には合致しないのかもしれないけれどね。

ちなみに歴は12年くらいかなぁ。
中学生の頃からだが、もうそんなに経つのか。
0120デフォルトの名無しさん2013/06/21(金) 02:39:19.55
あ、玄人の玄の字が消えている。
今日は調子悪い日のようだ。ミスが多い。
0121デフォルトの名無しさん2013/06/21(金) 08:29:21.21
本当は40過ぎのオッサンのくせに何言ってんだ
0122デフォルトの名無しさん2013/06/21(金) 12:10:44.91
アホほど自分を盛るよね
0123デフォルトの名無しさん2013/06/22(土) 17:20:48.65
スプラッシュスクリーンの画像を
ローカライズすることって可能?
可能なら方法を教えてほしい。

WPFの場合、ソリューションスクリーンの画像ファイルの
プロパティの内、「ビルドアクション」を「SplashScreen」に設定する
ことしかできないから、ローカライズは無理なのかなぁ。
0124デフォルトの名無しさん2013/06/22(土) 17:48:40.12
Mainを自分で書けば制御はできる
サテライトアセンブリに入れれるのかは知らない
0125デフォルトの名無しさん2013/06/22(土) 18:09:14.32
>>124
ありがとう。
>Mainを自分で書けば制御はできる
これを解説しているサイトとか知らない?
0126デフォルトの名無しさん2013/06/22(土) 19:55:56.13
http://shiba-yan.hatenablog.jp/entry/20080721/1216633996
これでApplicationをRunする前にSplashScreen 作ってShowすればいいんでね
01271232013/06/22(土) 20:07:02.47
>>126
WPFでもMainって書けたのか、知らなかった。
またひとつ勉強になりました。ありがとうございます。

>>124
意図を理解できておらず申し訳ありませんでした。
0128デフォルトの名無しさん2013/06/23(日) 00:06:32.97
System.Windows.Markup.XamlWriter
って4.5から非推奨になったん?
以前は.NET Framework Client Profileにあったのにさ
0129デフォルトの名無しさん2013/06/24(月) 20:25:44.02
質問です
TreeViewで現在表示されている(ただし選択はされていない)TreeViewItemを取得するにはどうしたらいいでしょう?
スクロール位置(VerticalOffset)とTreeViewItemの高さから計算すればいいかなと思いましたが、
もっと簡単な方法があればご教示ください
TreeViewItemのIsVisibleは見た目上表示されていないアイテムも含めTrueになっていて使えませんでした
0130デフォルトの名無しさん2013/06/24(月) 20:34:33.69
無いよ
裏技的にはあるけど使い物にならないと思う
0131デフォルトの名無しさん2013/06/24(月) 21:18:13.32
上の階層から順にヘッダーの領域を求めて表示されてるか計算するだけのような
0132デフォルトの名無しさん2013/06/24(月) 23:04:33.34
>>128
そもそも4.5はClient Profileが廃止されてるはずだが
01331292013/06/24(月) 23:13:13.82
ありがとうございました
自力でがんばります
0134デフォルトの名無しさん2013/06/24(月) 23:15:03.16
フレームワーク4.5だとオブジェクトブラウザで見ると
Markupの下には
System.Windows.Markup.ValueSerializerAttribute
しか見当たらないんだ。なんか参照追加設定要るん?
0135デフォルトの名無しさん2013/06/24(月) 23:26:13.41
>>134
PresentationFramework.dll
0136デフォルトの名無しさん2013/06/29(土) 13:57:39.80
StackPanelの要素(ボタン)<=>List<String> みたいなバインドってやる方法なんか無い?
調べてみたけど全然ヒットせん
0137デフォルトの名無しさん2013/06/29(土) 14:00:32.19
なんか無い?って質問なら
ボタンにそれぞれDataContext設定すれば行けるよ

でもそういうことが聞きたいんではないんでしょ
もう少し正確に頼むわ
0138デフォルトの名無しさん2013/06/29(土) 14:00:41.71
意味がよく分からんけどItemsControl使えよ
01391362013/06/29(土) 14:10:42.35
>>137
すまん大雑把すぎた
今いわゆるMVVMモデルに出来るだけ忠実な感じにしようと作ってるんだが、
StackPanelの上に1〜20個くらいの(モデルの内部状態に依存した)ボタンを
表示させたいんだ

Children.Addすりゃ出来るっちゃ出来るが、
これデータバインディングで出来ないのかな、と色々考えて調べたけど
俺のググリ力が足りないのか見つからんかった
という話なんだ

まで書いて更新したら>>138がエスパー力発揮してたんだけど、
View(ItemsControl.ItemsSource) <=> ViewModel(List<Button>) <= Model(List<String>)
でイケるのか…?
0140デフォルトの名無しさん2013/06/29(土) 14:14:15.76
微妙に正道ではないと思う
まずListBoxを作って、DataContextをContentにバインドしたButtonを持つDataTemplateをListBoxに設定して、
それからList<string>をListBox.ItemsSourceにバインド
0141デフォルトの名無しさん2013/06/29(土) 14:17:28.96
http://ideone.com/PStf4d
たとえばこんな
0142デフォルトの名無しさん2013/06/29(土) 14:17:42.28
RenderTargetBitmapを他スレッドからそうさする方法はないですか?
0143デフォルトの名無しさん2013/06/29(土) 14:18:29.08
1ヶ月悩むより他のアプローチを試そうとか考えない?
01441362013/06/29(土) 15:03:29.48
>>141
おお、ありがとう
このままコピペったら使えるかと思いきや例外吐いて止まったけど、
こういう要領でやればいいのか
0145デフォルトの名無しさん2013/06/30(日) 01:33:18.22
>>142
Freezeするか、Dispatcher.Invoke等で該当スレッドで操作する。
0146デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
WPFでVBを使ってるバカっているの?
0147デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
居ないけど突然なんだ?
0148デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
発作だろ
そっとしとけ
0149デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
先生!F#でWPFはおやつに入りますか?
0150デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
とかけまして、
0151デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
そもそもWPFが使われていない。
0152デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
WPF(でVB)?を使ってるバカっているの\?
0153デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
VB.netでWPF使えるよね?ね?
0154デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
使えてもVB厨に使う能力は無い
0155デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>154
コピペだけでプログラミングできるという特殊な能力があるだろ
0156デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
コピペしようにも、コピー元のサンプルが、
VBほとんどなくてC#がほとんどだけどねw

まぁしかし、どのみちWPFなら
VBでもC#でも、XAMLの方が重要になるけど
0157デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
WPFの場合は、プログラミング言語としてVBやC#を使ってる部分が少ないから、
VBプログラマでも簡単にC#に移行できてるよ。
セミコロンで行を終わらせることと、{ }で括ることと、forループの回し方だけ教えとけば、
VBプログラマででもWPF (C#)プログラマに変身できる。
0158デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
っつーかさ
そもそもC#自体特に難しいことないんだけどな、C++/CLIなんか触るとやっぱC/C++は何倍も難解だと感じるし
C#は標準ライブラリが貧弱すぎて、外部ライブラリに頼らざる得なくて、そうなると結局C/C++が必要になってUnsafeやラッパー書かざるを得なくなって、そうするとC#のわかり易さが消えてなくなる
0159デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
そ、そうか
0160デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
ライブラリたくさんあるじゃん
0161デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
VBしかできない奴にXAMLは無理。
0162デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
プロパティ量産するMVVMでVB使うのは単なる苦行
0163デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
VBにも自動実装プロパティあるぞw
0164デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
MVVMで自動実装プロパティなんか使ってどうすんだよ
0165デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
OneWayToSourceかもしれねーだろうが
0166デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
コメントに「このプロパティはOneWayToSource専用です。」とか書くの?
アホらし。
0167デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
で、おまいらはどんなモノを作ってんだ?
俺に見せてみろよ。口だけのやつじゃないだろうなw
0168デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
入門したてなので僕も見たいです
他人のソース
0169デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
お前がまず晒せよw まず出させて安全なとこから攻撃しようとすんなよw
0170デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
俺が作ってるわけじゃないし、
具体的な名を出すつもりもないが・・・

この汚ねぇDataGridはどう見てもWPFです。
ありがとうございました。

ってな感じの製品は割とよく見かけるな。
以前WinFormsで作られてたソフトが、
0からリプレースされると同時にWPFへ移行ってケースが多いようだ。
0171デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
>>164
自動実装プロパティの変更時にPropertyChangedを上げるProxyで包めばいい
Castle Dynamic Proxy使えば簡単に作れるよ
0172デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
出来る出来ないじゃなくて向いてるかどうかなんだけどな
0173デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
Castle Dynamic Proxyと自動実装プロパティの組み合わせは悪くないな。

俺は自前の静的コード生成でやってるが、
やってることはCastle Dynamic Proxyとあまり変わらない。
0174デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
すいません。VS2012Expressをインストールして、
WPFアプリケーションのプロジェクトを作成して、
最初からあるgridの上にpaintを乗せて、
そのpaintのmouse_moveイベントを作ったんですが、
mouse_moveの処理が呼び出されません。どうなってますか。
ちなみにgridのmouse_moveを作ったら呼び出されました。
0175デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
割とマジでPaintって何よ
そんなクラスねーぞ
0176デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
すいません。
paintでなくImageでした。
Canvasでやってもmouse_moveがきません。
0177デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
Imageのサイズどうなってる
0178デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
下のようになってます。ウィンドウの左上にImageを配置してます。間違ってますでしょうか。。
<Image HorizontalAlignment="Left" Height="250" VerticalAlignment="Top" Width="300" MouseMove="Image_MouseMove_1" Margin="0,19,0,0"/>
</Grid>
■ このスレッドは過去ログ倉庫に格納されています