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

WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2009/12/27(日) 10:58:30
あたらしいユーザーインターフェースシステム、Windows Presentation Frameworkについ
て語るスレ。.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/
0932デフォルトの名無しさん2010/05/15(土) 22:19:51
バインディングソース内のオブジェクトのプロパティをバインドしたいんだけどうまくいかない。
ソースとなるクラスに
public ScaleTransform st;があって、
XAML側では
<TextBlock Text="{Binding Path=st.ScaleX}"/>
というふうに指定した。参考↓Path=(オブジェクト名).(プロパティ名)による指定ができるらしい。
http://msdn.microsoft.com/ja-jp/library/system.windows.data.binding.path.aspx
ソース直下のプロパティだと問題なくバインディングできるのに。
XAMLでやるのは無理かな?
0933デフォルトの名無しさん2010/05/15(土) 22:20:49
>>932
うまくいかなかったソースも晒せよ
0934デフォルトの名無しさん2010/05/15(土) 22:27:58
実はstがパブリックフィールドだった
ていうかオブジェクト名とかリンク先には出てこないようだが?
0935デフォルトの名無しさん2010/05/15(土) 22:31:15
>>934
そうですパブリックフィールドです。
リンク先のは
>プロパティのサブプロパティは、C# で使用される構文と同様の構文によって指定できます。
>たとえば、Path=ShoppingCart.Order 句は、オブジェクトまたはプロパティ ShoppingCart
>のサブプロパティ Order へのバインディングを設定します。

が該当するかなと
0936デフォルトの名無しさん2010/05/15(土) 22:32:46
ルート要素でDataContext="{Binding RelativeSource={RelativeSource Self}}"
それとINotifyPropertyChangedを実装するか依存プロパティを使う必要がある
InitializeComponentの前で代入すれば一応動く(更新はされない)
0937デフォルトの名無しさん2010/05/15(土) 22:35:42
だからコードだせよ
0938デフォルトの名無しさん2010/05/15(土) 22:39:17
コードビハインド
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public ScaleTransform s;
public MainWindow() {InitializeComponent();}
public static readonly DependencyProperty PercentProperty =
DependencyProperty.Register(
"Percent",
typeof(double),
typeof(MainWindow),
new FrameworkPropertyMetadata(0.1));
public double Percent
{
get { return (double)GetValue(PercentProperty); }
set { SetValue(PercentProperty, value); }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
s = new ScaleTransform();
Binding bi = new Binding("ScaleX");
bi.Source = s;
this.SetBinding(PercentProperty, bi);
s.ScaleX = 1.2;
}
private void stack_Loaded(object sender, RoutedEventArgs e)
{stack.DataContext = this;}
}
}
0939デフォルトの名無しさん2010/05/15(土) 22:40:39
うわきた
そのまま貼りw
ここは外部のコード貼りサイト使わないのか
0940デフォルトの名無しさん2010/05/15(土) 22:42:09
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:w="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded">
<Grid>
<w:CustomControl1></w:CustomControl1>
<StackPanel x:Name="stack" Loaded="stack_Loaded">
<TextBlock Text="{Binding Path=Percent}"/>
<TextBlock Text="{Binding Path=s.ScaleX}"/>
  </StackPanel>
</Grid>
</Window>
イランとこ削ったけどこんな感じ。Percentプロパティはちゃんとバインドできてる。
>>936のRelativeSource Selfでの指定ではうまくいかんかった。
0941デフォルトの名無しさん2010/05/15(土) 22:42:47
プロパティにしろ
0942デフォルトの名無しさん2010/05/15(土) 22:45:04
> public ScaleTransform s;
(゚д゚)
0943デフォルトの名無しさん2010/05/15(土) 22:48:00
それと、プロパティにしてもDataContextを設定するタイミングによっては反映されない
RelativeSource Selfでうまくいかないのはそれが理由
更新を確実に反映させるには>INotifyPropertyChangedを実装するか依存プロパティを使う必要がある
0944デフォルトの名無しさん2010/05/15(土) 22:50:04
これは酷すぎ。
デバッグよりも、書籍で基礎的なBindの説明を全部読み直すことをお勧めする。

あと出力ウィンドウを見ろ。バインド失敗の実行時エラーが表示される。
0945デフォルトの名無しさん2010/05/15(土) 22:51:49
書籍ねぇ
0946デフォルトの名無しさん2010/05/15(土) 22:54:28
※コードの量が多い場合は下記サイトを使うなどしたほうがいいかも※
http://ideone.com/
http://codepad.org/

コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
0947デフォルトの名無しさん2010/05/15(土) 22:58:25
なるほど。パブリックフィールドをパブリックプロパティにしたらうまくいった。
出力ウィンドウ見てなかった…。

>>946
次からそこ使います
0948デフォルトの名無しさん2010/05/15(土) 23:47:33
RelativeSourceを指定してもうまくいかなかったのはStackPanelで宣言してたからだった…。まぬけ
Windowに書かないとだめだ。
あとソース直下のプロパティが依存プロパティでないと変更が反映されない。
今回の例では、フィールドからプロパティに書き直した”s”が依存プロパティでないと、
そのプロパティであるScaleXが依存プロパティでもきちんと反映されない。
>>943の言ってることがようやくわかった。今日はぐっすり寝られる。おやすみなさい
0949デフォルトの名無しさん2010/05/16(日) 02:50:14
まあしっかり寝ろよ
0950デフォルトの名無しさん2010/05/17(月) 01:34:04
さて起きたらWPFで3D画像処理の仕事だ。動く訳ねえからな、こんなもん。
やる気がしねえや。
0951飛び出せ!名無しくん2010/05/18(火) 07:06:30
WPFの本探しているがいいのがない
オススメある?
0952デフォルトの名無しさん2010/05/18(火) 08:01:30
エッセンシャルズ一択だろ
0953デフォルトの名無しさん2010/05/18(火) 15:57:19
2010が出てからWPFはじめようとする人が増えたみたいだな

一儲けさせてもらいますか
0954デフォルトの名無しさん2010/05/18(火) 20:51:48
>>953
ちゃんと情報を咀嚼したWPFの本を書いてくれると言うのか。
頼むわ、良かったら買うから。
0955デフォルトの名無しさん2010/05/18(火) 22:39:29
煽りでもなんでもなく良書書いてくれたら5000円越えるぐらいでも買うと思う。
0956デフォルトの名無しさん2010/05/18(火) 23:37:22
期待してるわ
0957デフォルトの名無しさん2010/05/18(火) 23:59:56
<TextBlock/>と<TextBlock Style="{StaticResource {x:Type TextBlock}}"/>は違うのに
<Style TargetType="..."/>と<Style TargetType="..." x:Key="{x:Type TextBlock}"/>は同じなのか…

リソースの検索ルーチンワケワカメ
0958デフォルトの名無しさん2010/05/19(水) 00:25:23
>>954
咀嚼っていうか
ちょっとゲーしちゃったやつだけど
よかったらお召し上がりください
0959デフォルトの名無しさん2010/05/19(水) 22:52:34
エッセンシャルって基礎知識あること前提に書かれてるからはじめに読む本じゃないだろ。
理解深めるには良いかもしれんが。

和書なら少々古いが、川西氏翻訳のWindows Presentation Foundationプログラミングがオススメだと思うが。
洋書なら Pro WPF 一択かね?タウンページ並の分厚さで読むのに不便だが。
0960デフォルトの名無しさん2010/05/19(水) 23:29:07
>>959
川西氏翻訳〜は
その後に決まりが変更されたことばかりで
間違った知識が入ってしまうと思うけどなぁ。
サンプルソースを入れてもビルド通らないこと多いし。
0961デフォルトの名無しさん2010/05/19(水) 23:32:25
大概の言語に入門サイト見てーなもんはあるもんだが
WPFのマイナーさが浮き彫り
0962デフォルトの名無しさん2010/05/19(水) 23:46:02
WPFデーターバインディングは凄いけど、
ほとんどのプロパティにアレが仕込まれてると思うと、
ちょっとゾッとするな。

データークラス作るの面倒くさいし。

CLRのオブジェクトレベルで実装してくれればいいのに。
0963デフォルトの名無しさん2010/05/20(木) 00:06:41
静的型では仕方ないでしょ
添付プロパティとか言語に組み込んだら型の意味がなくなる
0964デフォルトの名無しさん2010/05/20(木) 00:08:52
>プロパティにアレが仕込まれてると思うと、
あれとは?
0965デフォルトの名無しさん2010/05/20(木) 00:18:06
set
{
if (value != this.hogeValue)
{
this.hogeValue = value;
NotifyPropertyChanged("hoge");
}
}
0966デフォルトの名無しさん2010/05/20(木) 00:19:27
メジャーなアプリがWPFで書かれたとかあったっけ?
IDEとかじゃなく一般人が使うようなので
0967デフォルトの名無しさん2010/05/20(木) 00:20:44
NotifyPropertyChanged
これは仕方ないでしょ・・・
0968デフォルトの名無しさん2010/05/20(木) 00:31:04
文字列で通知するのがやな感じ
0969デフォルトの名無しさん2010/05/20(木) 00:32:37
>>968
そんなの言ってたらSQLとかhtmlとかどうするのw
0970デフォルトの名無しさん2010/05/20(木) 00:46:06
ほんとにhtml以下の速度だったりするから困る
0971デフォルトの名無しさん2010/05/20(木) 00:48:42
ラムダ式と式木使ってプロパティ名渡すのがいい感じだった。
0972デフォルトの名無しさん2010/05/20(木) 01:58:56
>>970
それはない
つマシン組み直し
0973デフォルトの名無しさん2010/05/20(木) 01:59:33
WCFとかすごいぞw
0974デフォルトの名無しさん2010/05/20(木) 02:36:32
>>966
無い。
そういうのはAdobe AIRが使われている。
0975デフォルトの名無しさん2010/05/20(木) 03:33:27
>>969
おま、何のためにLINQ出て来たと思ってんだよwwwww
0976デフォルトの名無しさん2010/05/20(木) 06:58:01
とっとと言語内で別の言語使えるようにしてくれんかね…
unsafeみたいにブロックで区切ってそこからはSQLネイティブで書いてインピーダンスミスマッチはは規定もしくは明示的に指定したものを使うとかで。
LINQは便利だけどなんか無理くり自分の土俵に持って来てる感が美しくない。
0977デフォルトの名無しさん2010/05/20(木) 07:50:13
お前らスレ違い
0978デフォルトの名無しさん2010/05/20(木) 18:29:44
評価を始めて、最初は良さそうに思うけど、
すぐに、マイクロソフトらしい実用に耐えない設計の甘さが露呈してきて幻滅する。
0979デフォルトの名無しさん2010/05/20(木) 18:41:45
>>978
もっと具体的に
0980デフォルトの名無しさん2010/05/20(木) 22:37:58
繰り返しをForeverに設定したアニメーションの移動速度を
動的に変更することって出来ますか?
例えばスライドバーで1〜10の値を得られるとし、
スライドバーの値を大きくすると、アニメーションの速度も
一緒に速くなるようなことがしたいのです。

どうやればできそうでしょうか?
0981デフォルトの名無しさん2010/05/20(木) 22:43:27
IValueConverterでdoubleだかintだかからDuration型への変換を定義して
アニメーションのDurationプロパティのバインディングを使えばいいんじゃない
0982デフォルトの名無しさん2010/05/21(金) 05:21:48
WPFってなんで死んでしまったの?
0983デフォルトの名無しさん2010/05/21(金) 05:24:23
死ぬも何も芽が出なかった
0984デフォルトの名無しさん2010/05/21(金) 07:08:08
まだWPFを使いこなせてないのか
0985デフォルトの名無しさん2010/05/21(金) 10:17:54
MonoのようにLinux版でないかな
0986デフォルトの名無しさん2010/05/21(金) 10:53:50
ギンピカ
0987デフォルトの名無しさん2010/05/21(金) 11:27:24
米国のサイトが翻訳されないから
0988デフォルトの名無しさん2010/05/21(金) 11:29:44
若干翻訳されてるが文章がくどすぎて読む気にならない
下手糞
0989デフォルトの名無しさん2010/05/21(金) 11:46:25
ハリボテすぎる。
0990デフォルトの名無しさん2010/05/21(金) 11:56:11
>>988
お前が書けYO
0991デフォルトの名無しさん2010/05/21(金) 13:31:07
できぬっ!!
0992デフォルトの名無しさん2010/05/21(金) 13:35:37
酷すぎる…っ!!!
0993デフォルトの名無しさん2010/05/21(金) 13:43:05
翻訳ェ・・・
0994デフォルトの名無しさん2010/05/21(金) 15:09:28
 V V
(´・ω・`) うさちゃんピース
0995デフォルトの名無しさん2010/05/21(金) 15:17:31
次ぎたててくる
0996デフォルトの名無しさん2010/05/21(金) 15:27:55
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part6
http://pc12.2ch.net/test/read.cgi/tech/1274423236/
0997デフォルトの名無しさん2010/05/21(金) 16:16:13
おつおつ
0998デフォルトの名無しさん2010/05/21(金) 16:21:15
発掘!五枚雑巾!!
0999デフォルトの名無しさん2010/05/21(金) 16:22:27
美しさは皮一枚

   醜さは骨の髄まで
1000デフォルトの名無しさん2010/05/21(金) 16:32:29
1000ならWPF終了
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。