WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/12/27(日) 10:58:30て語るスレ。.NET3.5 SP1 もリリースされて盛り上がってまいりますた。
Visual Studio 2008
ttp://www.microsoft.com/japan/msdn/vstudio/
Microsoft .NET Framework 3.5 Service Pack 1
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja
WPF Toolkit - June 2009 Release
ttp://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
Visual Studio 2010
ttp://www.microsoft.com/japan/msdn/vstudio/2010/overview/
関連スレ
Microsoft Silverlight その4
ttp://pc12.2ch.net/test/read.cgi/tech/1244812356/
過去スレ
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1245384489/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1231506876/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
ttp://pc11.2ch.net/test/read.cgi/tech/1211453941/
【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
ttp://pc11.2ch.net/test/read.cgi/tech/1162950198/
0607デフォルトの名無しさん
2010/04/22(木) 23:02:070608デフォルトの名無しさん
2010/04/22(木) 23:26:42window1の中のある領域に X を配置して、
その X の中を右方向にアニメーションさせた場合、
X の右端がXの左端にくっついたように
ずっと X がループされてスライドするアニメーションって
どうやったらできますか?
ここで X とは、CanvasでもPageでも何でもよいので、
ボタンとかラジオボタンとかが配置できる領域のことです。
説明が難しいのですが、例えば window1 に電車を描き、
電車の窓から X (外の景色) を眺めているとし、外の景色が
ずっとスライドしていく感じです。
このとき、X に動的に「電柱」の絵を置いたら、ループ絵として
次に現れる X にも「電柱」が存在するように見せたいです。
0609デフォルトの名無しさん
2010/04/22(木) 23:36:590610デフォルトの名無しさん
2010/04/22(木) 23:40:120611デフォルトの名無しさん
2010/04/23(金) 00:01:30ありがとうございます。ですが、それだと絵が切れてしまいます。
窓の大きさが X と同じで、動かす絵が X の場合、
X を右にスライドさせると、Xの左側が空白になります。
X1 X2 と Xを並べて、X2がXの領域からはずれたら X1 の左に
配置するようにすれば実現できますが、そうすると X1 と X2 が
同じものになりません。X1に電柱が追加されたらX2にも追加、となると
処理が重たくなりますので・・・。
>>610
ありがとうございます。
そちらの方法で、チカチカさせない方法があるのでしょうか??
0612デフォルトの名無しさん
2010/04/23(金) 00:08:20まあ>>610の方法はゲームの一般的なループの作り方なだけで
そのまんまはだめかもしれないけどねw
なるべく再利用した方がいいかと思って>>610として書いたけど
ちらついたりするならとりあえずは1つのファイルを内部で2つ同じものを作って
とかはだめ?
0613デフォルトの名無しさん
2010/04/23(金) 00:11:20同じ物を2枚並べた横長で作っておいて座標で調整するか
0614デフォルトの名無しさん
2010/04/23(金) 00:13:10これが標準のフレームワークってことになんのかしら
0615デフォルトの名無しさん
2010/04/23(金) 00:14:55やはり冗長な部分を作って
必要な部分だけ見せるのが手っ取り早いみたいですね。
なるべくなら再利用したいのですが、ひとまず↑でやってみます。
では、失礼します。
0616デフォルトの名無しさん
2010/04/23(金) 00:25:33画像をTile指定で表示してやれば自動的に繰り返しになる。
あとはViewportを動かしてやればいい。
ttp://www7a.biglobe.ne.jp/~fbsoft/test/miku1.cgi
0617デフォルトの名無しさん
2010/04/23(金) 00:31:51ttp://codepad.org/jGnPpTxR
0618デフォルトの名無しさん
2010/04/23(金) 00:43:03おぉ、このようなものもあるのですね。
寝る前に見て良かったです。
ざざっと調べてみたのですが、こちらの方法では
画像を複製表示することはできるようですが、
Buttonなどが配置されたPage(を配置したFrameなど)を
複製表示させることはできないみたいですね。
(調べ方が甘かったらすみません)
教えていただいた TileMode で絵を複製して、
Buttonなどは自分で複数配置する方法も検討してみます。
0619618
2010/04/23(金) 00:55:24TileMode から色々と調べてみましたが、
Canvas Neme="canvas1"
にボタンなどを配置し、
<Rectangle ... >
<Rectangle.Fill>
<VirualBrush Visual={Binling element=canvas1}" />
</Rectangle.Fill>
</Rectangle>
とすると、一応 Button なども複製されますね。
しかし(当然ですが)複製された絵の Button は操作できませんね。
残念です。
0620デフォルトの名無しさん
2010/04/23(金) 01:19:32動いてないときは普通に表示して、
スライド中だけVirtualBrushに入れ替えればいいんじゃない。
0621デフォルトの名無しさん
2010/04/23(金) 01:36:50移動中でもクリックに反応して欲しいんです。
0622デフォルトの名無しさん
2010/04/23(金) 02:09:47クリッピングと組み合わせて実現するのが常套じゃないのかな
0623デフォルトの名無しさん
2010/04/23(金) 04:11:30自分ですこしは考えなよ
0624デフォルトの名無しさん
2010/04/23(金) 06:47:11そういうことは2ch言ってもしかたないと思うんだぜ
0625デフォルトの名無しさん
2010/04/23(金) 07:47:11>>619では「考えている」認定されないのか。
2chって厳しいインターネットなんだなw
0626デフォルトの名無しさん
2010/04/23(金) 14:20:14自分の望むことをコードにすることはできるだろう、諦める=考えてない、ってことさ
0627デフォルトの名無しさん
2010/04/23(金) 18:38:39LineHightやMarginを試してみても変わらなかった
0628デフォルトの名無しさん
2010/04/23(金) 18:39:550629デフォルトの名無しさん
2010/04/23(金) 18:49:52WPFじゃなくてWinFormのでいいんだよな?
LineHeightってどのクラスのプロパティ?
行間ってのは段落間じゃない行間のことでOK?
まあEM_SETPARAFORMATとPARAFORMAT2使うことになると思う
>>628
にゅりゅ ってエロい響きだな
0630デフォルトの名無しさん
2010/04/23(金) 19:13:55WPFでフォントコントロールったら、
FormattedText クラスじゃないんか?
ttp://msdn.microsoft.com/ja-jp/library/system.windows.media.formattedtext%28v=VS.80%29.aspx
0631629
2010/04/23(金) 19:16:34C#スレと勘違いしてた、ごめん
0632デフォルトの名無しさん
2010/04/23(金) 19:22:450633デフォルトの名無しさん
2010/04/23(金) 22:08:51WPFの方
0634デフォルトの名無しさん
2010/04/24(土) 12:07:11自己解決した。
トークンごとに読み取ってそのトークンをパラグラフを追加するときに\r\nを無視しないのが原因だったらしい。
xamlを調べて初めて原因が分かった
間違い
<flowdocument>
<paragarh>aaaa<run>(見えないが\r)</run><run>(見えないが\n)</run></paragrah>
</flowdoument>
正しくは
<flowdocument>
<paragarh><run>aaaa</run></paragrah>
</flowdoument>
0635デフォルトの名無しさん
2010/04/24(土) 14:56:26TextRange range = new TextRange(p.ContentStart, p.ContentEnd);
this.para = new Paragraph();
this.para.Margin = new Thickness(0);
this.Spilitter.Parse(range.Text);
this.doc.Blocks.InsertBefore(p, this.para);
this.doc.Blocks.Remove(p);
パラグラフの置き換えを行うとキャレットがパラグラフの一番最後に移動してしまう。これを防ぐ方法はない?あらかじめCaretPostionを覚えておいて、置き換えた後で戻してもダメだった。
0636デフォルトの名無しさん
2010/04/24(土) 16:15:42var curP = richTextBox.CaretPosition.Paragraph;
var offset = curP.ContentStart.GetOffsetToPosition(richTextBox.CaretPosition);
var newP = new Paragraph();
newP.Inlines.Add("New Paragraph");
richTextBox.Document.Blocks.InsertBefore(curP, newP);
richTextBox.Document.Blocks.Remove(curP);
richTextBox.CaretPosition = newP.ContentStart.GetPositionAtOffset(offset) ?? newP.ContentEnd;
これじゃダメなん?
0637デフォルトの名無しさん
2010/04/24(土) 21:42:03それだとだめだ。
aaa
(aaaの先頭でzを入力)
zaaa
(連続で入力すると、zazaaになってしまう)
なんでWPFってこんなに面倒なの?
文字単位で選択することもできないし、キャレットを文字単位で動かすことすらできない。
開発者は馬鹿なの?
0638デフォルトの名無しさん
2010/04/24(土) 22:10:32何がしたいのか分からないんだけど。
文字単位で選択するなら:
richTextBox.Selection.Select(richTextBox.CaretPosition, richTextBox.CaretPosition.GetPositionAtOffset(10));
キャレットを次の文字に移動するなら:
richTextBox.CaretPosition = richTextBox.CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward);
TextPointer クラスと RichTextBox クラスについて、もうちょっと調べたら?
0639デフォルトの名無しさん
2010/04/24(土) 22:33:53目がシパシパしたwww
0640デフォルトの名無しさん
2010/04/25(日) 02:37:57パラグラフが
aaa
となっているときに
bbb
aaa
とすると、aaaを削除するとキャレットがaaaの先頭にあるにもかかわらず、bbbの後ろに移動してしまうのをどうにかして防ぎたい。
TextPointerについても調べたんだが、画面に表示されている文字単位で位置を取得するメソッドはなぜかなかった。
0641デフォルトの名無しさん
2010/04/25(日) 09:54:47>aaaを削除すると
は
>>635の
this.doc.Blocks.Remove(p);に当たるのかな
言ってることがあんまよくわからないけど、空のパラグラフを置いといてその先頭にキャレット置くというのがやりたいんじゃないの?
ソースはそうなってないだろ
0642デフォルトの名無しさん
2010/04/25(日) 10:24:40>言ってることがあんまよくわからないけど、空のパラグラフを置いといてその先頭にキャレット置くというのがやりたいんじゃないの?
それじゃなくて、パラグラフを置き換えてもキャレットの位置をそのまま保つということがやりたい
0643デフォルトの名無しさん
2010/04/25(日) 23:47:540644デフォルトの名無しさん
2010/04/26(月) 00:03:420645デフォルトの名無しさん
2010/04/26(月) 00:52:19e.Handle = trueでうまくいきました
ありがとうございます
0646デフォルトの名無しさん
2010/04/26(月) 03:26:57http://uproda.2ch-library.com/239369drL/lib239369.png
平行四辺形とかでしたらなんとかなるんですが・・・
0647デフォルトの名無しさん
2010/04/26(月) 04:25:39そんな形なら標準ボタンを使うわけでもないんでしょ
0648デフォルトの名無しさん
2010/04/26(月) 06:27:53傾斜とかもできるので上辺もしくは下辺を短くするとか
できるかなあと思ったんですが無理ですかね?
0649デフォルトの名無しさん
2010/04/26(月) 07:04:590650デフォルトの名無しさん
2010/04/26(月) 07:09:59アフィン変換使いなよ自分で計算してな
0651デフォルトの名無しさん
2010/04/26(月) 08:48:31ContorolTemplateを書けばいいだけでサンプルも結構転がってるから。
あとエッセンシャルWPF読んどけ
0652デフォルトの名無しさん
2010/04/26(月) 09:41:08それは線形変換で表現できないから無理
高校数学C参照
0653デフォルトの名無しさん
2010/04/26(月) 13:08:53TextPointer getPostionAtCharacters(int offset)
{
for (int i = offset; this.Document.ContentStart.GetPositionAtOffset(i) != this.Document.ContentEnd; i++)
{
TextRange range = new TextRange(this.Document.ContentStart, this.Document.ContentStart.GetPositionAtOffset(i));
if (range.Text.Length == offset)
return range.End;
}
return null;
}
0654デフォルトの名無しさん
2010/04/26(月) 15:05:53ありがとうございます。
しかしここまでGUIをいろいろ変えやすいとなるとデザインセンスないと
きついですね・・・
0655デフォルトの名無しさん
2010/04/26(月) 18:47:52エラーでまくり
0656デフォルトの名無しさん
2010/04/26(月) 19:03:560657デフォルトの名無しさん
2010/04/26(月) 19:07:390658デフォルトの名無しさん
2010/04/26(月) 20:20:09XAML側でコントロールに名前(Name="hoge")とかやれば
C#側から従来のWinFormのようにいじり放題
0659デフォルトの名無しさん
2010/04/26(月) 20:38:000660デフォルトの名無しさん
2010/04/26(月) 20:41:360661デフォルトの名無しさん
2010/04/26(月) 20:46:270663デフォルトの名無しさん
2010/04/26(月) 21:38:080664デフォルトの名無しさん
2010/04/27(火) 00:08:38コードビハインド使ったら負け
0665デフォルトの名無しさん
2010/04/27(火) 00:53:010666デフォルトの名無しさん
2010/04/27(火) 00:54:50都会派はこれ
0667デフォルトの名無しさん
2010/04/27(火) 00:55:030668デフォルトの名無しさん
2010/04/27(火) 00:57:01作らされてるなら敗者
0669デフォルトの名無しさん
2010/04/27(火) 01:27:42プログラマーはバインド関連をマスター
デザイナーはXAML関連をマスター
そんなところですかね?
0670デフォルトの名無しさん
2010/04/27(火) 02:18:51アニメの動きのタイミングを同期させる方法ってありますか。
0671デフォルトの名無しさん
2010/04/27(火) 04:59:260672デフォルトの名無しさん
2010/04/27(火) 08:28:30わけがわからない
0673デフォルトの名無しさん
2010/04/27(火) 09:00:47正解じゃない。
プログラマーはバインド関連とXAML関連をマスター 。
0674デフォルトの名無しさん
2010/04/27(火) 22:14:00デザイナーはExpression BlendとXAMLの基礎事項をマスター
0675デフォルトの名無しさん
2010/04/28(水) 00:05:190676デフォルトの名無しさん
2010/04/28(水) 00:08:47C#のコントロールにも一応項目あったけどここまで使えたっけ?
0677デフォルトの名無しさん
2010/04/28(水) 00:15:35上司は「デザイナの作った物がそのまま動く!素晴らしい!」と言い出して
結局はプログラマが地獄を見る。そういう代物だろ?
0678デフォルトの名無しさん
2010/04/28(水) 00:17:38まあ前ほどは地獄をみないんじゃないかな
バインディングが強力なのでいい感じだよ
0679デフォルトの名無しさん
2010/04/28(水) 00:17:430680デフォルトの名無しさん
2010/04/28(水) 00:18:510681デフォルトの名無しさん
2010/04/28(水) 00:19:170682デフォルトの名無しさん
2010/04/28(水) 01:14:120683デフォルトの名無しさん
2010/04/28(水) 01:48:520684デフォルトの名無しさん
2010/04/28(水) 02:07:24上のサイトの中央付近から始まる「コレクション・オブジェクトへのバインド」のところを
動かそうとしたのですが下記のようなエラーとなり動きません。
>エラー 1 値 ' {Binding}' をプロパティ 'ItemsSource' に割り当てることができません。
>型 'IEnumerable' のプロパティ 'ItemsSource' は文字列として指定できません。
どのように対処すればよいのでしょうか?
0685デフォルトの名無しさん
2010/04/28(水) 02:14:01.NET 4 と .NET 4.0 の違いを詳しく教えてください。
区別すべきなのでしょうか?
0686デフォルトの名無しさん
2010/04/28(水) 02:15:10.NET 4 と指摘していることについて詳しく教えてください
0687デフォルトの名無しさん
2010/04/28(水) 02:19:37素直にXAMLで書けよ
0688684
2010/04/28(水) 02:28:18ListBoxを使っているほかのサンプルと見比べたところ
<Grid x:Name="MainPanel" Loaded="MainPanel_Loaded">
<ListBox ItemsSource=" {Binding}"
DisplayMemberPath="Bmi"/>
</Grid>
の
<ListBox ItemsSource=" {Binding}"
{Binding}の前の半角スペースが原因で文字列として認識されていたようです。
>>687
質問に対する答えになってないと思いますが・・・
0689デフォルトの名無しさん
2010/04/28(水) 02:37:07MVVMを模倣して手動でモデリングしたクラスプログラミングをすることは効率化になりますか?
0690デフォルトの名無しさん
2010/04/28(水) 02:37:150691デフォルトの名無しさん
2010/04/28(水) 02:43:57「.NET Framework 4」が正式名称。
.NET 4.0と言っても問題なく通じるので実用上の問題はない。わざわざ指摘する程の事でもないだろ>>682
0693デフォルトの名無しさん
2010/04/28(水) 03:21:53目指す目標としてXAMLなどがあるんだし、それと同じ仕組みにすれば
MVVMも可能じゃないかな?
まあ自前であれこれするより本当はWPFにするべきなんだが
ところでなんでそんな古い環境にこだわらないといけないんだろうw
0694デフォルトの名無しさん
2010/04/28(水) 05:26:27・Viewを定義する「なにか」を設計する
(WPFではXAML)
・「なにか」からViewを生成するライブラリを実装する
(WPFではSystem.Presentationとかかな?)
・「なにか」と実行時バインドする方法も実装する
(依存プロパティみたいな仕組み。ここでリフレクションががっつり登場)
マンドクセ・・・
XAMLの仕様はそのまま使って.net 2.0 WinFormsでもViewが構築できるライブラリ作れば
それなりに需要は・・・ないか
0695デフォルトの名無しさん
2010/04/28(水) 05:34:570696デフォルトの名無しさん
2010/04/28(水) 05:37:58あれは使えないの?
0697デフォルトの名無しさん
2010/04/28(水) 06:30:25>693
ぶっちゃけマシン性能にもよるんだろうが未だにWPF遅くね?
頻繁な更新が必要なデイトレアプリみたいなもんとか向いてなさそうなんだが。
>694
そげんな感じのもん作ったお。未だに2000とかにも配慮しなきゃいけなくてな( ^ω^)・・・
0698デフォルトの名無しさん
2010/04/28(水) 06:42:250699デフォルトの名無しさん
2010/04/28(水) 07:39:00thx.
2005なのは、そういう環境でWindowsXpとWindowsCEの開発レッスンを受けてますw
自分が2000使ってるのでその点も嬉しいかなw
0700デフォルトの名無しさん
2010/04/28(水) 10:36:39CAL(Prism)なんかはUnityのDIコンテナ使ってるよ。
.NET4で追加されたMEFもかな、仕組みはDIコンテナっぽいが。
0701デフォルトの名無しさん
2010/04/28(水) 10:46:100702デフォルトの名無しさん
2010/04/28(水) 10:52:10自分のグラボがWPFに対応出来てるかしりたいんです
0703デフォルトの名無しさん
2010/04/28(水) 12:52:20WPF のパフォーマンス プロファイリング ツール
http://msdn.microsoft.com/ja-jp/library/aa969767(VS.90).aspx
0704デフォルトの名無しさん
2010/04/28(水) 13:55:32VのコードビハインドでVとVMを手で結びつければバインディングはいらないよ
コマンドはVMのメソッドを呼び出せばいいだけ
0705デフォルトの名無しさん
2010/04/28(水) 14:11:36それが必要ないんだったらコードビハインドをVMとみなして
XAMLで自身のプロパティにバインドするだけでいい
それが本来WPFで想定されていたバインディングの使い方
0706デフォルトの名無しさん
2010/04/28(水) 14:12:000707デフォルトの名無しさん
2010/04/28(水) 14:22:27C++/CLIで使えないのは単にMSにやる気がないから
WPFはアンマネージドな世界との相互運用がしづらいしものすごく高レベルなので
わざわざC++/CLIから使うというのはちょっと考えられない
■ このスレッドは過去ログ倉庫に格納されています