トップページ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/
0322デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
幼稚園児に成長したって言われてもそうですかとしか言いようがない
もう来なくてもいいよ
0323デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
>>321
ここに書き込んだから成長した訳じゃないんだろ
お前も時間とエネルギーを無駄にしただけってわけ
0324デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
エネルギー保存の法則
0325デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
役に立たない2chのクズ共がw
0326デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
TextBlockで表示した文字が滲んでしまいます。
滲まずに表示させるにはどうすればよいでしょうか。
0327デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
かつてのWPF最大の欠陥です
WPFがまともに使い物になるのはWPF4からだと考えてください
.NET4以降にアップデートしましょう
0328デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>327
.NET Framework は4.5がインストールされてるのですが、WPFのバージョンが3のようです。
どうやれば4以降にできるのでしょうか。

環境はWin8 pro/VS2012 Proです。
0329デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
ならWPF4.5で動いてるよ
UseLayoutRoundingをTrueに
0330デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>329
色々やってみたのですが変わりません。

<TextBlock x:Name="infoText" TextWrapping="Wrap" LineStackingStrategy="BlockLineHeight"/>

<TextBlock x:Name="infoText" TextWrapping="Wrap" LineStackingStrategy="BlockLineHeight" UseLayoutRounding="True"/>

でいいんですよね? False もやってみたのですが、変わりませんでした。
0331デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
OSのバージョンは?
0332デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>331
この板、ID出ないのか。
Win8 pro/VS2012 Proです。
0333デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
SnapsToDevicePixelsじゃねえの
0334デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>333
両方入れないとダメだったと思う。
0335デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
プロジェクトのプロバティー開いて「対象のフレームワーク」を.net4以上に変えたらどうなるかな?
勿論バックアップしてから弄ったほうがいい
03363262013/07/21(日) NY:AN:NY.AN
SnapsToDevicePixelsもやってみましたが変わらず。
対象のフレームワークは .NET Framework4 Client Profile でした。
念の為に.NET Framework4/.NET Framework4.5に変えてみましたが、ビルドできなくなった。(名前 'Properties' は現在のコンテキスト内に存在しません。)

自作のアプリじゃない(GitHubでソースが公開されている)ので、もうこういうものだと諦めて使います。
いろいろアドバイスありがとうございました。
0337デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
役に立たないクズばかり
0338デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
お前が筆頭だがな
0339デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
PCのDPIが普通じゃなくなってたりして
0340デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
テキストがにじむのならクリアタイプあたりがあやしい気が
0341デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
座標が整数じゃないからかも
0342デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>341
それを整数にするのがUseLayoutRoundingじゃないのか?
ただこれ、ルートで使えって書いてあるが
>ルート要素の UseLayoutRounding を true に設定する必要があります。
>(中略)親の座標がピクセル境界にない場合、子の座標はピクセル境界になりません
03433262013/07/22(月) NY:AN:NY.AN
>>342
ダメもとで一番上位のフォームのWindowにUseLayoutRounding=True"を入れてみると文字がにじまなくなりました。
ありがとうございました。
0344デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
WinRTのXAMLで質問があります
ListViewのアイテムテンプレートにFrameを配置し、FrameのContentに動的生成したRichTextBlockをバインドします
プロジェクトを実行しListViewを前後にスクロールすると画面外に出たアイテム内のRichTextBlockが隣り合ったアイテム内のRichTextBlockと入れ替わっていることがあります
(入れ替わるアイテム内のRichTextBlockはどちらも画面外です)
この現象は確認した限りではアイテムパネルが仮想化されているときになりました
どうすればこの現象をなくすことができますか?
やりたいことはListViewのアイテムに動的生成したRichTextBlockを配置することです
0345デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>344です
3行目の説明に間違いがありました
RichTextBlockが入れ替わるのは隣り合っているアイテムではありませんでした
正しくは前後にスクロールされて、画面外にでたアイテムが新しく画面内に入ってきたアイテムと入れ替わっていました
0346デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
WinRTはスレチ

ストアアプリにはRichTextBlockという不気味な物があるんだな
0347デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
x,y,半径を持ったクラス作って、ViewModelでそれのListを扱い、
それを自動的にView側に描画するような仕組みって
どうにか作れたりしないもんか
View側に処理書くの嫌なんだよな
0348デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
おかえりください
0349デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
データバインドだけで行けそうだけど
0350デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
役に立たない2chのクズ共がw
0351デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>347
そういうのはむしろVにコード書きまくってカスタムコントロールに閉じ込めろ
無理にMVVMにするよりその方が全体としては綺麗だし再利用性も高くなる
0352デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>351
なるほど、やっぱりカスタムコントロールでなんとかするしか
道はないのか…
ありがとう、参考になった
0353デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
これは読んでおくべきっていうWPFの洋書って何かありますか
0354デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
>>353
ペントハウスとプレイボーイ
0355デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
ハスラーのがもっといいよ
0356デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
itemscontrolとデータバインドを使いなはれ
0357デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
なんでC#ってpublic変数推奨みたいなことになってるの
10年前猫も杓子もオブジェクト指向って言ってた頃は、
変数はprivateにして関数経由で読み書きすべきと主張してたジャン
この態度の変わりようはなんなんn
0358デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
>>357
C#はプロバティ-至上主義だろ
お前は何処の星出身だよ

仮にお前がpublic変数を現場で使えと言われているなら、言っている奴が特殊だ
0359デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
誰も推奨なんかしてないし>>357が何か誤解してるとしか思えんな
0360デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
外部に公開するクラスじゃないならなんでもかんでも
プロパティにする必要も無い気もする。
0361デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
publicな自動実装プロパティってpublic変数と実質同じじゃないの?
0362デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
利用する側のコードを変更することなく、後で自動実装でないプロパティに変更できる点が違う
なんでもかんでも公開するべきではないという意味では、フィールドより少しだけマシとはいえやはり必要最小限にするべき
0363デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
あと、private setが便利だよな
0364デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
setter, getterなんか面倒くさいだけやったんや
0365デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
一応WPFの話題に戻すと
XAMLからデータバインドに使えるのは
publicなプロパティだけだから注意な
0366デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
どうせ暗黙のgetter,setter生成に依存しちゃうなら
いっそpublic識別子の代わりにproperty識別子みたいなの
言語仕様に入れちゃえば良かったのにね
0367デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
D最強
0368デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
Delphi最強
0369デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
プロバティーは外部から変更されたタイミングが簡単にわかるし
外部から読み取り専用にして内部データを保護できるとか、便利な仕組みだよな
自動実装の不満点は初期化の仕組みがないことだわ
0370デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
そういう機能主義的な観点で言えば、Java信者の人がよく言うように「そんなのgetter/setterでも可能」
って話になるからなあ。

そうじゃなくて、OOの属性という概念をプログラミング言語に素直に写像したものが
プロパティだと考える方が納得的だと思う。
0371デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
>そんなのgetter/setterでも可能

そんなの言い出したらCでも可能
0372デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
C言語で十分やったんや
それ以降は言語製作者のオナニーやったんや
0373デフォルトの名無しさん2013/07/27(土) NY:AN:NY.AN
C+1 ぐらいでいいから C を完全に滅ぼせるのがほしかったな
0374デフォルトの名無しさん2013/07/29(月) NY:AN:NY.AN
ところが.NET4.0ではバグのせいでXAMLから
privateなプロパティをバインドできてしまうという
0375デフォルトの名無しさん2013/07/29(月) NY:AN:NY.AN
放置すればするほど阿鼻叫喚が待ってるわけか…
修正するなら下手な救済を与えずバッサリ行って欲しいね
0376デフォルトの名無しさん2013/07/29(月) NY:AN:NY.AN
全部public変数で問題無かったんや
0377デフォルトの名無しさん2013/07/29(月) NY:AN:NY.AN
Unity3Dがpublicフィールド推奨してるせいで
ますます進むpublicフィールドへの回帰
0378デフォルトの名無しさん2013/08/02(金) NY:AN:NY.AN
金額を表示・入力する TextBox が結構あるので、
右寄せ表示と通気用の書式を Style にまとめようと思った。

けど、StringFormat って Style で指定できなくね?
Label の ContentStringFormat なら Style で指定できるのに。

なんだこれ。
0379デフォルトの名無しさん2013/08/02(金) NY:AN:NY.AN
ネタにマジレスは禁止です><
0380デフォルトの名無しさん2013/08/02(金) NY:AN:NY.AN
WPF leak でぐぐると山ほどでてくるけど、直す気はあるのかな?
グラフィック系のハンドルだのファイルハンドルだのオブジェクトだのメモリだの
だだ漏れじゃないか

あとMediaElementが不定期にファイル握ったままになるのを直してほしいわぁ
0381デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
実際それでWPFで作られたアプリが不安定になるわけじゃないし、
メモリリークしてたっていいんじゃないの
0382デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
アプリ起動時にマウスカーソルの位置をアプリの中央に設定したいんですがどうしたらいいですか
0383デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
win32api
0384デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
チューチューマウス
0385デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
WPFってマウスの位置設定もできないのか…
0386デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
別にWPFである必要性がないような...
System.Windows.Forms.Cursor.Positionって普通に使えるよね。
名前空間の仕分けが変なのは今更言っても
0387デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
てかWPFに限らず
勝手にマウスカーソル移動させられちまうアプリって
俺がユーザーならそれだけで不満爆発
0388デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
System.Windows.Forms.Cursor.Position
それ読み取りしか使えなかったっす
0389デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
PointToScreenで相対座標で設定しようとするとできなかったっす
0390デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
低能だわマルチポストだわ
0391デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
しかもマルチだし
0392デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
役に立たない2chのクズ共がw
0393デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
>>388は完全に間違いだし
>>389はたぶん使い方間違ってるんだろうし
0394デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
おそらくSystem.Drawing.PointとSystem.Window.Pointの違いに気づいてないとか
0395デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
visual studio 2012みたいな外観のアプリケーションってタイトルバー含めて自分で描画してるんですかね?
0396デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
vs2010expressでマウス操作でGUI部品を貼り付けて実行したら、
GUI部品のレイアウトが微妙にずれてるんですが、どうなってますか
vs2012だったらこういうことはないですか
0397デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
馬鹿はどんな道具を使っても無理
0398デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
WPFは"論理的に"正しくレイアウトするんだ
クソ細かいことを気にしていちいち微調整したがるジャップには合わない
0399デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
そもそもWPFはポトペタで作るもんじゃない
それじゃごく初歩的な単純な画面くらいしか作れないし
WPFで作る意味もない
0400デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
しかしWPF製のアプリケーションって全然増えないねw
ストアアプリは別として
0401デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
散々だけど当たってなくもないw
http://www.infoq.com/jp/articles/Win8-LOB-Options
0402デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
全く持ってその通りでワロタ…
0403デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
metroはデータベースが触れるのだったら使いたいけど
今のままじゃ無理だな

妙な設計のおかげでデータベースがレスポンス寄越す前に
metroが休止したりとかさんざんな状態になる
0404デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
ストアアプリなんてゲームを除けばWebサービスのクライアントを作るための
ものなんだからそんなもん要らん
ちょっとリッチなHTML+JSにすぎない
0405デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
画像ファイルをスムーズに拡大/縮小したく下のようなコードを書きました。
スライドバーを動かすとそれにあわせて拡大縮小します。
ただ一定範囲ごとにひっかかりがあります。たぶん拡大縮小の画像を
生成しているんじゃないかと思うのですが何かスムーズになる方法は
ないものでしょうか?環境はVS2008です。

Class Window1

  Dim img As New Image

  Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    Dim dec As New TiffBitmapDecoder(New Uri("c:\a4.tif"), BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.Default)
    For Each frame As BitmapFrame In dec.Frames
      img.Source = frame
      Canvas1.Children.Add(img)
      Exit For
    Next

    Slider1.Maximum = 1000
    Slider1.Value = 500

  End Sub

  Private Sub Slider1_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles Slider1.ValueChanged
    img.RenderTransform = New ScaleTransform(Slider1.Value / 1000, Slider1.Value / 1000)
  End Sub

End Class
0406デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
>>405
見てないけど引っかかるのはスクロールバーと関係ない?
0407デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
>>406
スクロールバーは表示されていないので関係なさそうです。
0408デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
てかデータバインド使えよ それだけで済む
0409デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
BitmapCacheOption.Default
のおかげか一度拡大縮小するとその大きさの部分はスムーズに
拡大縮小されます。
0410デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
DrawingVisualでRenderするようにしたらスムーズになりました。
お騒がせしました。
0411デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
if (control.Visibility == Visibility.Visible)
{
control.Visibility = Visibility.Collapsed;
}
else
{
control.Visibility = Visibility.Visible;
}

こうやっていちいち書くのは面倒なので一行で書けるようにしたいのですがどうすればいいですか?
controlは常に同じ型とは限りません。
0412デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
? と : 使えば一行。
0413デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
>>412 が書いてるように三項演算子書くと一行だけど
ロジックミスを起こしやすいところなので
実際はToggleVisibility()あたりのメソッドを自作しておいた方がいいかもね
初心者はメソッドをうまく使えないので難しいかもなあ


> controlは常に同じ型とは限りません。
ここも不安要素w
0414デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
Shapeクラスを継承して作った自作クラスをリストに入れておいて、
リストから順番に取り出してポリモーフィズムみたいにして順に関数を実行したい

for(int i=0; i<リストの要素数; i++)
{
  Shape myShape = (リスト)[i];
  myShape.doSomething();
}

この場合に doSomething関数をどうやって作ったらいいんでしょうか
Shapeに関数追加とかできるんでしょうか
0415デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
え?
継承ってどういうことか分かってます?
0416デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
どうやってって…継承して普通にメソッド書いたらいい。ググれ
wpf関係ないし言語仕様の話だ
0417デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
なんか夏休みですのー
この2,3日の書き込みのレベルがw
0418デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
継承した関数に書いてもShape型では実行できないじゃないので
0419デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
>>418
継承かと思ったら致命傷だったw
てか、アンタの考えているものを実現できるのは拡張メソッドというやつ
継承は継承したクラスが元のクラスの機能を使えるってものだから、逆は無理だよ
0420デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
Shapeを継承したMyShapeにdoSomethingを仮想関数で作っておいて、
MyShapeを継承した自作クラスでdoSomethingを実装して、
MyShape型で関数呼び出せばいけたわ
役に立たない2chのクズ共がw
0421デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
幼稚くさ
■ このスレッドは過去ログ倉庫に格納されています