約 4,103,505 件
https://w.atwiki.jp/wpfapp/pages/13.html
WPF(Windows Presentation Foundation)とは 一言で言えば、Windows用アプリケーション開発のためのGUIライブラリ。細かい事を言えば.NET Framework上で動作するため、ターゲット環境はWindowsに限るわけではないし、GUIライブラリというよりは、GUIアプリ開発のためのフレームワークと呼べるかもしれない。 いずれにしてもWindowsで、しかも.Net Frameworkを使ったGUIアプリ開発をする際にはWindows Formsと並んで選択肢の一つとなる存在。WPFの方が後発である分、先進的な設計思想に基づいて作られている。Windows Formsの後継というほどではないが、Microsoftとしては今後はWindows FormからWPFの開発へ注力してくらしい。 WPFの特徴 Windows FormsやVisual C++におけるMFCなどと比較して、特記すべき事項は ロジックとインターフェースの分離が可能 ただでさえ動作の重い.Net Frameworkだが、それに輪をかけて重い 描画はDirect3Dを用いるためGPUの恩恵を受けれる データドリブンなアプリケーションを作成できる(データバインディング) 1.は、WebにおけるHTMLとJavaScriptの関係に似てるのかもしれない。WPFではUI部分をXAMLと呼ばれるXMLで記述し、処理の部分をC#やVisual Basicで記述する。UI部分のXML記述する方式はAdobe AirやSilverlightのようなRIAにもよく見られる。XAMLの仕様も膨大なものになっているので私も触りしか把握できていないが、HTMLとCSSの関係のようにUIの構造と見栄えも分離できれば良いと思うのが、見栄えも今のところXAMLで定義するようだ。複雑な見栄えはExpression Blend等の外部ツールで定義することをMicrosoftは想定しているようだ。 2. フレームワークの多用は開発が容易になる反面、実行速度が犠牲になりがちだがWPFも例外ではない。とはいえ起動は遅いものの体感では問題になるほどではなかった。対象ユーザを考慮して、非力なPCが想定される場合は、WPFの選択には注意が必要。 3. マルチメディア・グラフィック周りの対応が充実しているので、特に意識せずコードを書いてもGPUを活用してくれるのは有り難いだろう。私はこの辺りを意識しないといけないアプリを書いたことが無いので、あまり書けることがないです。 4. WPFでの開発において肝となる部分であり、同時に慣れない者にとっては最大の壁となる概念。要はデータとUIコントロールを文字通り結びつけて(バインド)して、データが更新されればそれは即座にUIコントロールに反映される。逆にUIコントロールから編集作業をすればそのままデータが更新される。データが更新されてもユーザーが更新操作をしなければ反映できなかったイベントドリブンに比べれば、容易かつ直感的なアプローチで開発できる。が、どのコントロールにどんなデータがバインドできるのか、どのような方法でバインドするのかといった情報が乏しい。DataBaseのデータも直接バインドできるため、これが主な用途と思われるが情報もこれに偏っているおり私は非常に困っている最中です。
https://w.atwiki.jp/osinko/pages/113.html
<資料> 非常に分かりやすい資料:Windows Presentation Foundation 概要(WPF) (.NET Framework) (このページの右隅下側に「Windows Presentation Foundation」の統合メニューがあり、そこから概要や基本構造などのページが閲覧できます。非常に分かりやすいので困ったときは読むこと) (慣れた頃に読むと良い)WPF入門 - @IT たぶんMSDN内で最新のバインディングに関するサンプルや資料で読みやすい:方法のトピック XAMLのコントロールの仕様を見たい場合はここが見やすい:System.Windows.Controls 名前空間 <C#(CLR)とXAML(WPF)のリソースとコレクションの連携方法> リソースとコード http //msdn.microsoft.com/ja-jp/library/vstudio/system.windows.resourcedictionary.aspx コレクションにバインドして選択に基づく情報を表示する SelectedValue プロパティ <描画に関する資料> 描画の要となるDrawingContextとDrawingVisualに関して簡潔に説明がある:Simple is best - Yahoo!ブログ <利用頻度の高いマークアップ拡張> Binding 通常のバインディング。{Binding X}という書き方は{Binding Path=X}と同じ意味である。ElementName=で対象をエレメントにしたり、Source=でソースにしたり、RelativeSource=でターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得できる。続くPathで対象のプロパティを指定する。バインディング・ソースがXMLデータの場合、PathプロパティではなくXPathプロパティを利用する TemplateBinding コントロールテンプレートの適用先のコントロールに与えられたプロパティ値を取得するために利用する 資料:RelativeSource のマークアップ拡張機能 例 StackPanel !--エレメントをキーで参照してバインディング-- TextBox x Name="TextBox1" Text="5"/ Slider Value="{Binding ElementName=TextBox1, Path=Text}"/ !--先祖をたどってWindow要素を見つけプロパティTitleをバインディング-- TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=Title}"/ !--自分自身のプロパティWidthを参照してHeightにバインディング-- Rectangle Fill="Aqua" Width="50" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"/ /StackPanel <利用頻度の高いコードスニペット> propdp 依存プロパティを記述する際に非常に便利 <利用頻度の高いusing> System.ComponentModel DependencyObjectを利用したい場合に必要。INotifyPropertyChangedは自動実装される Microsoft.Win32 コモンダイアログの利用等に System.IO File.Open関数などファイル入出力 System.Windows.Markup XamlWriter.Save関数などシリアライズ <利用頻度の高いプロパティ> Resources リソース、XAML内にオブジェクトを作ったりする際に利用する。リソースのコードを書く位置に注意:利用するオブジェクトのコードより上(先に宣言しておく必要がある)に書かれている必要がある Content プロパティは Object 型である為、格納できる項目に制限は無い。つまり文字でもUIElementでもなんでも入れて表示できる DataContext 子へと継承可能なコレクションを指定する Items そのコントロールが扱うアイテムコレクション(絶対指定オブジェクト)。ItemsSourceとの併用は不可らしい ItemsSource そのコントロールで利用したいリソース内のコレクション、もしくはバインディングオブジェクトをここで設定する(相対指定オブジェクト) IsSynchronizedWithCurrentItem 選択アイテムの変更を反映させる。ComboBoxやListBoxエレメント等で利用する DisplayMemberPath オブジェクト内のテキスト表示するプロパティを指定する(ちなみにプロパティウインドウではキーボードで直接名前を入力した方が早い) Name エレメントの名前 ElementNameのキー値指定時にここで設定した一意のキー名を利用する。反対に言えばこれを設定しない場合バインディングできない(しない) Text 表示するテキスト SelectedValuePath 選択アイテムを値で参照する際のコレクション内のプロパティ先を文字列で指定できる SelectedValue 選択する値 SelectedIndex 選択するインデックス SelectedItem 現在選択されているアイテムオブジェクト。このまま続けて「.~」でプロパティを書いてもOK。例 Image Source="{Binding SelectedItem.FileLocation, ElementName=ComboBox1}" /Image <利用頻度の高いオブジェクト> Style スタイル指定。TargetTypeプロパティでスタイルを適用するターゲットをコントロール名で指定できる Setter Style等をセットする。Property と Value を使用して対象プロパティを指定し値をセットする。Style内に複数指定可能 ResourceDictionary リソースのオブジェクトを生成する。XAMLのファイル指定も可能。MergedDictionarieで複数の辞書を結合できる Style.Triggers トリガー動作するスタイルを指定する。プロパティにイベント、バリューに値を指定。子のSetterで設定指定する ControlTemplate コントロール・テンプレートを作成する。TargetTypeで動作するコントロール。XAMLで挟む内容に視覚要素を書くと良い ContentPresenter この要素が置かれた位置にコントロールの中身(=Contentプロパティに与えた値)が配置される コントロール・テンプレートがコントロールの表示方法をカスタマイズするものであるのに対して データ・テンプレートはデータの表示方法をカスタマイズするものである <トリガーの種類> Trigger: 特定のプロパティの値の変化をトリガーとして、Setterを用いてプロパティ値を変更する。 MultiTrigger: Triggerを複数条件に対応させたもの。指定したすべての条件が満たされた場合にトリガーがかかる。 DataTrigger: スタイル適用先のUI要素だけでなく、データ・バインディングされたデータを監視する。 MultiDataTrigger: DataTriggerの複数条件版。 EventTrigger: プロパティ値の変化ではなく、イベントの発生をトリガーとする。また、Setterではなくストーリーボードを使ったアニメーションによりプロパティ値を変化させる。 <コントロール・テンプレートの作成> ボタンなどのコントロールの基底となるControlクラス(System.Windows.Controls名前空間)は Templateというプロパティを持っていて、このTemplateプロパティにControlTemplateクラス (System.Windows.Controls名前空間)のインスタンスを設定すればよい。 リソースの作成例: Window.Resources ResourceDictionary ResourceDictionary.MergedDictionaries ResourceDictionary Source="Dictionary1.xaml" / ResourceDictionary Style TargetType="Button" Setter Property="Background" Value="BlanchedAlmond" /Setter Setter Property="FontSize" Value="30" /Setter /Style /ResourceDictionary /ResourceDictionary.MergedDictionaries /ResourceDictionary /Window.Resources トリガーの作成例: StackPanel.Resources Style TargetType="TextBox" Setter Property="Background" Value="LightGray"/ Style.Triggers Trigger Property="IsMouseOver" Value="True" Setter Property="Background" Value="LightBlue"/ /Trigger Trigger Property="IsFocused" Value="True" Setter Property="Background" Value="LightPink"/ /Trigger /Style.Triggers /Style /StackPanel.Resources コントロール・テンプレートの作成例: Window.Resources Style TargetType="Button" Setter Property="Template" Setter.Value ControlTemplate TargetType="Button" Grid Ellipse Width="100" Fill="{TemplateBinding Background}" / ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/ /Grid /ControlTemplate /Setter.Value /Setter /Style /Window.Resources StackPanel Button Content="ABC" Background="Aqua" Height="50"/ Button Content="DEF" Background="Crimson"/ /StackPanel <利用頻度の高いXAML> VisualStudio上のXAMLはコードで書いた方がスムーズに作業できる。 コードの入力方法が分らない際、プロパティウインドウをヘルプ的に利用してもよいが煩雑なので基本的にコード作業推奨 インテリセンスが利用できない事柄。以下の状況ではまったくインテリセンスが働かないバインディングの際のElementNameのキー値指定やリソースのキー値指定 ルーティングイベントのハンドラの記述(資料) 以上の理由からバインディングの割り当てやリソース値の作成や割り当てはプロパティウインドウを利用するのがやりやすい XAML は大文字と小文字を区別する プロパティ属性値は文字列で設定する。 この文字で指定されたプロパティの値は適切な型変換されなければならない(WFPは既定で特定の型変換のクラスを持っていてコンパイル時適切に処理されている) 必要であれば型変換を自分で作らなければならない XMLで記述する注意点。XAMLの記述にはXML形式を用いるため「 」「 」「 」「"」などの文字はそのままでは利用できない。これにはCDATAセクションを用いる(「 ![CDATA[」と「]] 」で囲む) xmlns 一意の名前 名前空間の指定(オススメはsrc(ソース)など良さそう) 一意の名前 オブジェクト名 これにより名前空間内のCLRオブジェクト(C#のオブジェクト等)にアクセスできる。インスタンスもこれで作成できる !-- Text -- 注釈 x Key 各リソースにキー値、一意の名前を設定します。エレメントに名前を付けたりResourceやStyleやTemplate等さまざまに使用します x Class XAML ページの分離コードを提供するクラスの CLR 名前空間とクラス名を指定します x Code ![CDATA[]] 等と併用すればXAML内にCLRコードなどが埋め込める/ x XData XMLデータアイランドをXAML稼働環境内に配置できるようにします。主にXmlDataProvider の子オブジェクトとして使用される。資料 XmlDataProvider データ バインディングで使用する XML データへの宣言アクセスを有効にします。これによりインライン XML データを埋め込むことができます。プロパティ「XPath」:データ コレクションの生成に使用される XPath クエリを取得または設定します。資料 <単語> Dependency 依存する XAML Extensible Application Markup Language の略。「拡張アプリケーションマークアップ言語」みたいな意味。CLRにおけるオブジェクトのインスタンス(以降、CLRオブジェクト)を生成するためのマークアップ言語。Metroスタイルでも利用できる。 WPF Windows Presentation Foundation の略 Parser パーサー 型変換のこと コードビハインド(code-behind) XAML 中に記述したGUI要素とC#(CLR)で記述したプログラム処理を分離して製作する考え方。デザイナーとプログラマーそれぞれ分けて作業できるようにする仕組み。デザイナーがコードを読まなければいけない時点で仕組み的に、やや無理がある気もする マークアップ拡張 { }で囲まれた部分で行う拡張機能の事。例 Text="{Binding ElementName=slider1, Path=Value}"/ リソースの利用時もマークアップ拡張で指定を行う。例 TextBox Text="{DynamicResource String1}" FontSize="{DynamicResource value}" / アトリビュートシンタックス(Attribute Syntax) プロパティをセットする構文 例<Window Title="MainWindow" Height="350" Width="525" プロパティエレメントシンタックス(Property Element Syntax) プロパティ要素構文。同じくプロパティをセットするがエレメントのような扱いで構文を書く 例 TextBox Width="80" Binding ElementName="slider1" Path="Value"/ /TextBox 少し手の込んだ階層構造のプロパティはこちらの構文でないと書けないものがある URI (Uniform Resource Identifier) インターネット上やローカルのハードディスク内にあるファイルを参照できる仕組み Loose XAML CLRを含まずXAMLのみで動くプログラムの事。IEやfireFox等で動く <ファイル構成> App.xaml この XAML ファイルでは、WPF アプリケーションとすべてのアプリケーション リソースを定義します。 Application.Resources タグ内で指定する。リソースのコードを書く位置に注意 利用するオブジェクトのコードより上(先に宣言しておく必要がある)に書かれている必要がある <データバインドの要点> データーバインディングの概念とデータフローの方向 IC9060.png データバインドの具体的なコード例はWPF_サンプルを参照 こちらも詳しい資料:WPFの「データ・バインディング」を理解する-@IT <利用頻度の高いCLRクラス> ObservableCollection T 通知アリのデータコレクション IValueConverter 型コンバータを作成する際に利用するクラス。ValueConversion属性も合わせて利用するらしい <図形> Rectangle 矩形(四角) Ellipse 円 Polygon 多角形 Line 線 型変換 XAMLプロセッサにとって全てはテキスト文字列として受け取られている 最終的にテキストはプロパティの値の型に変換される必要がある たとえば、 LinearGradientBrush StartPoint="0,0" EndPoint="1,1" のように指定した場合 XAMLプロセッサは既定の設定により"0,0"というstringをPoint.X=0,Point.Y=0という風に型変換している これにはPointConverterクラスが利用されている <PointConverterの例> PointConverter a = new PointConverter(); string str = "12,24"; Point test = (Point)a.ConvertFrom(str); string test2 = (string)a.ConvertTo(test, typeof(string)); これにより文字列"12,24"がPoint型のx=12,y=24に変換される 最後の行ではPoint変換された値を、またもとのstringに変換している ConvertFrom()はXAMLのコンパイル時の型変換に利用され、ConvertTo()はシリアライズに利用される このような仕組みを利用してカスタムな型変換処理を組み込むことができる 詳細は資料:TypeConverters および XAMLを参照 C#(CLR)で書いたクラスをWPFのXAML上でインスタンス化したい場合、まずXAMLのカスタムプレフィクスを定義してアセンブリの型を XAML で参照できるようにする必要がある XAML要素としてのカスタム クラスの要件 カスタム クラスがパブリックであり、既定の (パラメーターなしの) パブリック コンストラクターがサポートされている カスタム クラスが入れ子になっていない。入れ子になったクラスや、そのクラスの一般的な CLR で使用される構文の "ドット" は、添付プロパティなどの他の WPF または XAML の機能に干渉します。 資料:XAML のカスタム プレフィックスとカスタム型 資料:WPF における XAML とカスタム クラス <例> Page x Class="WpfApplication1.Page1" xmlns src="clr-namespace WpfApplication1" これで参照が通っているのでC#内のコードで書かれたPersonクラスをインスタンス化したい場合 Page.Resources src Person x Key="test" Name="このようにプロパティもセットできる"/ /Page.Resources のように一意のキーを指定した上でインスタンス化する。この際プロパティを使って値をセットできる。この場合、以後XAML内で「test」の名前でこのオブジェクトにアクセスできる セットできるプロパティの値は自動的にIDEに識別される。intやstringはもちろんPoint等(Point="12,24"みたいに)も可能。これは正確に言うと型変換されている カスタムクラスのインスタンス化はエレメントのリソース内でしか出来ない(この場合 Page.Resources 内)。たとえばコントローラー内で同じ宣言をするとエラーが出る 「CLR内のオブジェクト」はビルドが通ってはじめてアセンブリとして認識されるので、どこまでIDEがオブジェクトを認識しているか状況把握しておく事(未ビルドで書いたばかりのコードはIDEからみて認識されていない!) 「XAML内のリソース」も同様で未ビルドではIDEに存在を認識されていない。注意する事! 作成したインスタンスは属するエレメントのリソース部によりStaticResourceとして扱われる(上記の例の場合、PageのStaticResourceとして扱われる) インスタンスからプロパティを経由してデータを取り出したい場合はデータバインディングを使用する。以下例 Grid TextBox Text="{Binding Name, Source={StaticResource test}}"/ /Grid List Person のようなコレクションもインスタンス化出来る。C#側は class PesonList List Person {} のような形で宣言しておいてXAML側は以下のようにします Window.Resources src PesonList x Key="ListTest" src Person Name="test1" ID="1"/ src Person Name="test2" ID="2"/ src Person Name="test3" ID="3"/ /src PesonList /Window.Resources この2行は何をしているか?について xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" C#におけるusingのクラスライブラリの読み込みみたいなものらしい 詳しくはXAML ルート要素と XAML 名前空間を参照 using System.Linq; using System.Text; こんな感じでXAMLで利用するセットを名前空間で設定している(・・・クラスライブラリの外部サーバーへの配置。クラウド化みたいな考えで良いのかな?) この部分は何をしているか?について xmlns System="clr-namespace System;assembly=mscorlib" x Class="WpfApplication1.MainWindow" ここで読み込まれている mscorlib.dll(DLLファイル)には、.NET Frameworkの基本的なクラス・ライブラリのアセンブリが含まれており これらのサービスを利用できるようにSystemという名前のキーにセットしている。利用したい場合は以下の例のように使う Button System DateTime 2004/3/4 13 6 55 /System DateTime /Button x Class属性には分離コードで実装するクラス名、上記の場合「WpfApplication1」名前空間のMainWindowクラスに分離コードを置く事を指定している (「ビュー・モデルビュー・モデル」で言えば「モデルビュー・モデル」のコード(C#のCLR)を置く場所を指定している) x Name属性にはフィールド名を指定する XAML内のクラスのインスタンスの作成は FrameworkElement.Resources プロパティ によって行う object object.Resources oneOrMoreResourceElements /object.Resources /object object オブジェクト名 oneOrMoreResourceElements ここにリソース作成の為のコードを書く C#からは public ResourceDictionary Resources { get; set; } で拾える。以下C#のCLRの例。(どのエレメントに属したリソースかが重要でコードの位置によって「this」等が必要な事に注意する) LinearGradientBrush a = (LinearGradientBrush)this.Resources["backgroundBrush1"]; この場合、backgroundBrush1 がXAML側で設定したキー
https://w.atwiki.jp/sourceforts/pages/4.html
source forts とは? Half-Life2(以下HL2)というPCゲームの無料MODのひとつです。 HL2があれば無料でプレイできます。 source fortsの特徴 戦闘は相手ベースの旗(ボール)奪って自陣に持ってかえるCapture The Flagです。 戦闘開始前に自ベースを板や箱を使って要塞化することができます。
https://w.atwiki.jp/sourceforts/pages/5.html
source fortsとは? Half-Life2(以下HL2)というPCゲームのMODのひとつです。 HL2を持っていれば無料でプレイできます。 (訂正)HL2DMのソースを使っているため、HL2だけだと起動はできてもHL2DMを持っていないとサーバーに接続することができません。ご注意下さい。 公式サイト http //www.sourcefortsmod.com/ source fortsの特徴 戦闘は2チームに分かれて相手のベースから旗を取って持ってくるCapture The Flagです。 また戦闘開始前のビルドタイムと戦闘するコンバットタイムに別れています。 ビルドタイムでは箱や板を使い自ベースを要塞化できます。←ここがゲームのうり。
https://w.atwiki.jp/anything/pages/13.html
目次 目次 各sourceの説明現在開いているバッファの一覧 バッファにマッチしなかった場合にバッファを作成する ミニバッファに入力されたファイル履歴の一覧 カレントディレクトリにあるファイル一覧 最近開いたファイルの一覧 manマニュアルを参照する Infoマニュアルを参照する コマンド履歴の一覧を得る Emacsコマンドを実行する Emacs関数の検索 anything-c-source-emacs-functions-with-abbrevs ブックマークを開く anything-c-source-picklist anything-c-source-imenu anything-c-source-file-cache anything-c-source-locate anything-c-source-tracker-search anything-c-source-mac-spotlight anything-c-source-bbdb anything-c-source-evaluation-result 計算結果を表示する Googleサジェストの結果を取得する anything-c-source-jabber-contacts テンプレ 各sourceの説明 現在開いているバッファの一覧 変数名 anything-c-source-buffers 詳細 現在開いているバッファの一覧を取得します パッケージ anything-config.el おすすめ度 ★★★★★(とても便利) バッファにマッチしなかった場合にバッファを作成する 変数名 anything-c-source-buffer-not-found 詳細 バッファにマッチしなかった場合にバッファを作成します パッケージ anything-config.el おすすめ度 ★★★ (普通) ミニバッファに入力されたファイル履歴の一覧 変数名 anything-c-source-file-name-history 詳細 変数file-name-historyの一覧を取得します。 file-name-historyは、ミニバッファに入力されたファイル履歴の一覧です。 パッケージ anything-config.el おすすめ度 ★★★ (普通) カレントディレクトリにあるファイル一覧 変数名 anything-c-source-files-in-current-dir 詳細 カレントディレクトリにあるファイル一覧を取得します。 パッケージ anything-config.el おすすめ度 ★★★★ (便利) 最近開いたファイルの一覧 変数名 anything-c-source-recentf 詳細 変数recentf-listの一覧を取得します。 file-name-historyは、最近開いたファイルの一覧です。 recentfを使うには、.emacsに設定を加える必要があるかもしれません。 (setq recentf-max-saved-items 500)(recentf-mode 1) おすすめ度 ★★★★★(とても便利) manマニュアルを参照する 変数名 anything-c-source-man-pages 詳細 manページを参照する パッケージ anything-config.el おすすめ度 ★★ (人によっては) Infoマニュアルを参照する 変数名 anything-c-source-info-pages 詳細 Infoマニュアルを参照する パッケージ anything-config.el おすすめ度 ★★ (人によっては) コマンド履歴の一覧を得る 変数名 anything-c-source-complex-command-history 詳細 コマンド履歴の一覧を得る パッケージ anything-config.el おすすめ度 ★★★ (普通) Emacsコマンドを実行する 変数名 anything-c-source-emacs-commands 詳細 Emacsコマンドを実行します。 M-x よりも柔軟な検索(comment-regionを探すのに comme reg でOK)が出来るので、慣れればM-xは必要なくなります。 パッケージ anything-config.el おすすめ度 ★★★★ (便利) Emacs関数の検索 変数名 anything-c-source-emacs-functions 詳細 anything-c-source-emacs-commandsと比べて、インタラクティブでは無いEmacs関数も検索対象に含まれます。 パッケージ anything-config.el おすすめ度 ★★★ (普通) anything-c-source-emacs-functions-with-abbrevs ブックマークを開く 変数名 anything-c-source-bookmarks 詳細 ブックマークを開きます パッケージ anything-config.el おすすめ度 ★★★ (普通) anything-c-source-picklist anything-c-source-imenu anything-c-source-file-cache anything-c-source-locate anything-c-source-tracker-search anything-c-source-mac-spotlight anything-c-source-bbdb anything-c-source-evaluation-result 計算結果を表示する 変数名 anything-c-source-calculation-result 詳細 calc-evalの計算結果を表示します おすすめ度 ★★★ (普通) Googleサジェストの結果を取得する 変数名 anything-c-source-google-suggest 詳細 Googleサジェストを利用したGoogle検索を行います。 パッケージ anything-config.el おすすめ度 ★★★ (普通) anything-c-source-jabber-contacts テンプレ 変数名 anything-c-source-xxxxxxx 詳細 sourceの用途や、使い方など パッケージ xxxxxxx.el おすすめ度 ★★★★★(とても便利) ★★★★ (便利) ★★★ (普通) ★★ (人によっては) ★ (使うかも)
https://w.atwiki.jp/eccs_down/pages/13.html
"福島第一原発" - Google ニュース http //news.google.co.jp/news/search?pz=1 cf=all ned=jp hl=ja q=%22%E7%A6%8F%E5%B3%B6%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%99%BA%22 cf=all scoring=n 福島第一原子力発電所 - Google ニュース http //news.google.co.jp/news/search?pz=1 cf=all ned=jp hl=ja q=%E7%A6%8F%E5%B3%B6%E7%AC%AC%E4%B8%80%E5%8E%9F%E5%AD%90%E5%8A%9B%E7%99%BA%E9%9B%BB%E6%89%80 cf=all scoring=n 福島第一原発 - Google ニュース http //news.google.co.jp/news/search?pz=1 cf=all ned=jp hl=ja q=%E7%A6%8F%E5%B3%B6%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%99%BA cf=all scoring=n 福島 原発 - Google ニュース http //news.google.co.jp/news/search?pz=1 cf=all ned=jp hl=ja q=%E7%A6%8F%E5%B3%B6+%E5%8E%9F%E7%99%BA cf=all scoring=n 日付順 重複を表示しない nikkansports_com http //www.nikkansports.com/ ニュース速報 - 47NEWS(共同通信) http //www.47news.jp/news/flashnews/ 【ニュース速報・東日本大震災…福島第1原発事故】 47トピックス - 47NEWS(よんななニュース) http //www.47news.jp/47topics/e/200026.php 時事ドットコム http //www.jiji.com/ 時事ドットコム:記事検索 http //www.jiji.com/jc/z?key=%CA%A1%C5%E7%C2%E8%B0%EC%B8%B6%C8%AF submit=%B5%AD%BB%F6%B8%A1%BA%F7 福島第一原発 http //www.jiji.com/jc/z?key=%CA%A1%C5%E7+%B8%B6%C8%AF submit=%B5%AD%BB%F6%B8%A1%BA%F7 福島 原発 「時事通信」の検索結果 - Yahoo!ニュース http //news.search.yahoo.co.jp/search?p=%BB%FE%BB%F6%C4%CC%BF%AE st= vaop=a to=2 ei=euc-jp asahi_com(朝日新聞社):東日本大震災 - ニュース特集 http //www.asahi.com/special/10005/index_npp.html 東日本大震災 原発関連 最新ニュース 原発関連記事一覧 asahi_com:朝日新聞社の速報ニュースサイト http //www.asahi.com/ asahi_com(朝日新聞社):記事一覧 - 社会 http //www.asahi.com/national/list2.html 福島原発 特集 YOMIURI ONLINE(読売新聞) http //www.yomiuri.co.jp/feature/20110316-866921/ 社会 ニュース 速報 YOMIURI ONLINE(読売新聞) http //www.yomiuri.co.jp/national/ ニュース速報 - 毎日jp(毎日新聞) http //mainichi.jp/flash/ 毎日jp - 毎日新聞のニュース・情報サイト http //mainichi.jp/ 福島原発事故 記事検索結果 - 毎日jp(毎日新聞) http //search.mainichi.jp/result?p=%E7%A6%8F%E5%B3%B6%E7%AC%AC%EF%BC%91%E5%8E%9F%E7%99%BA st=s 「福島第1原発」 で検索した結果 【記事一覧】福島第1原発 炉心溶融をめぐる経緯+(1-9ページ) - MSN産経ニュース http //sankei.jp.msn.com/etc/news/110312/etc11031217510001-n1.htm 福島 原発 - Bing ニュース http //www.bing.com/news/search?q=%e7%a6%8f%e5%b3%b6+%e5%8e%9f%e7%99%ba qpvt=%e7%a6%8f%e5%b3%b6+%e5%8e%9f%e7%99%ba FORM=Z7FD MSN産経ニュース http //sankei.jp.msn.com/ 日本経済新聞 http //www.nikkei.com/ 原発危機 :特集 :日本経済新聞 http //www.nikkei.com/news/special/top/q=9694E3E0E2E1E0E2E3E3E5E6E2EA;p=9694E3E0E2E1E0E2E3E3E5E6E2E1;o=9694E3E0E2E1E0E2E3E3E5E6E2E0?n_cid=DSEQS002 絞り込み検索 :日本経済新聞 http //www.nikkei.com/news/category/at=ALL 絞り込み検索 :日本経済新聞 http //www.nikkei.com/news/category/at=DGXZZO0195165008122009000000 「企業」 を選択 福島第一原発関連ニュース NHKニュース http //www3.nhk.or.jp/news/genpatsu-fukushima/ NHKニュース http //www3.nhk.or.jp/news/ FNNニュース 社会一覧 http //www.fnn-news.com/news/headlines/category00.html 社会ニュース|日テレNEWS24 http //www.news24.jp/society/ きょうのニュースを動画で! news every http //www.ntv.co.jp/every/news/index.html テレビ朝日|テレ朝news(社会) http //www.tv-asahi.co.jp/ann/news/web/html/soci_top.html YouTube - ANNnewsCH さんのチャンネル http //www.youtube.com/profile?user=ANNnewsCH#g/u 社会ニュース News i - TBSの動画ニュースサイト http //news.tbs.co.jp/society/ YouTube - tbsnewsi さんのチャンネル http //www.youtube.com/profile?user=tbsnewsi#g/u 福島原発情報wiki - livedoor Wiki(ウィキ) http //w.livedoor.jp/hukusimagenpatsu/ 福島原子力発電所wiki - 福島原子力発電所wiki http //fukushima.st-great.com/ 原発・放射能を説明してくれるスレ テンプレ@ ウィキ http //www45.atwiki.jp/universal_meltdown/
https://w.atwiki.jp/netnet/pages/47.html
動的生成による、画像表示がけっこうめんどくさそう。 WPFで作成してても、Resourceに画像を入れると、Drawing形式になる。。。 ということで、Drawing.BitmapからBitmapSourceに変更する方法を探してみた。 public static BitmapSource ConvertToBitmapSource(System.Drawing.Bitmap gdiPlusBitmap) { IntPtr hBitmap = gdiPlusBitmap.GetHbitmap(); return Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } Source http //forums.msdn.microsoft.com/en-US/wpf/thread/ea9a4e55-8905-4486-97fb-7981c2b75963/
https://w.atwiki.jp/atachi/pages/32.html
データバインドの動作 [#k465c5ef] バインドソースの指定 [#rc75f3da] 親からの継承 [#kdff50ec] Binding.RelativeSource [#a581de89] バインドモード [#s700eb9b] OneWayモード [#v08ce3cd] TwoWayモード [#bf122f92] OneWayToSourceモード [#k20c3c47] バインドの実行タイミング [#yf730c72] PropertyChanged [#da09d538] LostFocus [#sed9262c] コレクションのバインド [#h8063c0d] コレクションビューの定義 [#f8ad5be9] 並べ替え・フィルタ・グルーピング [#ra1a06f4] データオブジェクトによるバインド [#t844cc8d] バインドターゲットとなるカスタムコントロールの作成 [#i709f888] WPFのデータバインディングは、データモデル側がプロパティの変更があったことを通知しないとバインドされないので注意が必要。(Adobe Flexのバインディングとはその仕組みがぜんぜん違うので、AdobeFlexお経験したことがある方は注意) バインドのタイミングについては、バインドのタイミング項を参照。 バインドする側(TextBoxなどのコントロール側)をバインドターゲットと呼び、バインドしたい値を持っているオブジェクトをバインドソースと呼ぶ。 MSDN バインディングの概要 MSDN Bindingクラス データバインドの動作 次のXAMLは、リストコントロールに色のリストを表示し選択された項目によって文字の背景色を変更するサンプルです。 リストコントロールと文字コントロールの間でデータバインドが成立しています。 StackPanel TextBlock Width="248" Height="24" Text="Colors " TextWrapping="Wrap"/ ListBox x Name="lbColor" Width="248" Height="56" ListBoxItem Content="Blue"/ ListBoxItem Content="Green"/ ListBoxItem Content="Yellow"/ ListBoxItem Content="Red"/ ListBoxItem Content="Purple"/ ListBoxItem Content="Orange"/ /ListBox TextBlock Width="248" Height="24" Text="You selected color " / TextBlock Width="248" Height="24" TextBlock.Text !-- TextBlockのText属性に関する設定を行うタグ -- Binding ElementName="lbColor" Path="SelectedItem.Content"/ /TextBlock.Text TextBlock.Background !-- TextBlockのBackground属性に関する設定を行うタグ -- Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBlock.Background /TextBlock /StackPanel Bindingタグがバインドを行うための記述で、 Binding ElementName="lbColor" Path="SelectedItem.Content"/ というのは、同一フォーム内のlbColorというコントロールをバインドするという意味となります。 バインドが実行された場合、SelectedItem.Contentの値をターゲット(TextBlock.TextまたはTextBlock.Background)に与えられます。 バインドが実行されるタイミングはListBoxの実装に含まれており、通常はいくつかの操作がバインド実行のトリガーとして機能する。 ListBoxではアイテムの選択状態が変更した時にバインドが実行される。 バインドソースの指定 バインドターゲットがバインドするバインドソースを指定する方法には次の方法があります。 FrameworkElement.DataContext 親要素からの継承 Bindingクラスの次のプロパティからいずれか Binding.Source Binding.ElementName Binding.RelativeSource 親からの継承 親要素の継承とは、次の例ではGrid要素内のButton要素は、親要素に設定されたDataContext属性を継承しているので、Source属性にバインドソースを指定する必要がありません。 Grid DataContext="{StaticResource myDataSource}" Button Text="{Binding Path=Name}" / /Grid ListBox.ItemsSource属性のようにコレクションをバインドソースとする場合にmyDataSourcesそのものをバインドする為にBinding.Sourceを省略して記述することができます。 Grid DataContext="{StaticResource myDataSources}" ListBox ItemsSource="{Binding}" ... /ListBox /Grid Binding.RelativeSource RelativeSourceマークアップ拡張を使用してバインドソースを設定できる。(マークアップ拡張) Binding.RelativeSourceの設定を行うために、RelativeSourceマークアップ拡張を使用しなければならないので記述が長くなってしまう。(*1) RelativeSourceには指定可能なバインドソースが次の3つから選ぶことができる。 Self 自分自身をバインドソースにする。 TemplatedParent テンプレート(ControlTemplate)の親をバインドソースにする。 FindAncestorモード 上記のものとは指定方法が異なる。 MSDNにはRelativeSourceプロパティについて次のような記述がされている。 バインディング ターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得または設定します。 Selfは自分自身をバインドソースとします。「{RelativeSource Self}」のように指定します。 TextBox Text="{Binding RelativeSource={RelativeSource Self}, Path=Width}" Width="23" / イメージ的には次のような形と同じ。 TextBox Name="text1" Text="{Binding ElementName=text1,Path=Width}" Width="23" / TextBoxにはWidthプロパティの値である「23」という文字が表示される。 TemplatedParentはテンプレート(ControlTemplate)を使用している場合に、テンプレートの親をバインドソースとして使用します。 Window x Class="WpfApplication1.MainWindow" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="120" Width="250" Window.Resources Style TargetType="Button" Setter Property="Template" Setter.Value ControlTemplate TargetType="Button" Grid Ellipse Fill="{TemplateBinding Background}"/ ContentPresenter Content="{Binding RelativeSource= {RelativeSource TemplatedParent} , Path=Name }" / /Grid /ControlTemplate /Setter.Value /Setter /Style /Window.Resources WrapPanel Button Name="MyButton" Content="ぼたん" / Button Name="MyButton2" Content="ぼたん2" / /WrapPanel /Window 次のように表示が行われます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Binding_TemplatedParent.jpg) XAMLではButtonのContentには「ぼたん」または「ぼたん2」としていますが、StyleによってButtonコントロールのテンプレートはオーバーライドされます。 ControlTemplateのContentPresenter.Contentはバインディングを設定していますが、ここで設定した「{RelativeSource TemplatedParent}」はテンプレート対象であるButtonコントロールを指します。Buttonコントロールをバインドソースとするため、バインド対象はButton.Nameプロパティとなります。 TemplatedParentはControlTemplateでしか作用しません。 テンプレートを使用できるケースとして、ListBoxのItemTemplateがありますが、ItemTemplate内のDataTemplateでBindingを使用する場合、TemplatedParentを使用することはできません。(エラーや警告は出ません) FindAncestorモードでは指定した型が見つかるまでBindingから親へとオブジェクトツリーを遡りながらバインドソースを決定します。 FindAncestorモードでは、AncestorTypeプロパティに探したい型を指定します。(x Typeマークアップ拡張を使用してAncestorTypeの値を記述する) Grid Name="MyGrid" TextBlock Text="{Binding RelativeSource= {RelativeSource AncestorType= {x Type Grid} } ,Path=Name }" / /Grid TextBlockには「MyGrid」という文字が表示される。 バインドモード UIでバインドを使う場合、ほとんどのケースでバインドターゲットはUIになる。 TextBoxとデータ変数をバインドする場合は、ユーザーから入力した内容をデータ変数に値をコピーする(ターゲット→ソース方向)とシステムロジックによってデータ変数にセットされた値をTextBoxに表示するために値をコピーする(ソース→ターゲット方向)の両方向バインドを使うと値のやりとりが簡単です。そのため、TextBoxはデフォルトでバインドモードがTwoWayになっています。 OneWay ソース → ターゲット リードオンリーのUIに値を表示する場合に使用することが多い。 TwoWay ソース →← ターゲット TextBoxのように、ユーザーからの入力を受ける場合に使用することが多い。 OneWayToSource ソース ← ターゲット 通常のUIでは使用することはまれ。 OneWayモード バインドソースからバインドターゲットへのデータバインディングを行うモード。 値の設定は一方通行なので、アプリケーションのデータをUIに表示することができる。 TwoWayモード データを双方向バインドするモードです。 「ソース→ターゲット方向」へのバインドはPropertyChangeによって実行されます。 「ターゲット→ソース方向」へのバインドはターゲット側の設定内容によって実行タイミングが異なります。 下記のコードは、ListBoxとTextBoxがTwoWayモードでバインドされているので、TextBoxに色名(たとえば「Pink」)を入力するとListBoxへ入力値がバインドされます。 StackPanel TextBlock Width="248" Height="24" Text="Colors " TextWrapping="Wrap"/ ListBox x Name="lbColor" Width="248" Height="56" ListBoxItem Content="Blue"/ ListBoxItem Content="Green"/ ListBoxItem Content="Yellow"/ ListBoxItem Content="Red"/ ListBoxItem Content="Purple"/ ListBoxItem Content="Orange"/ /ListBox TextBlock Width="248" Height="24" Text="You selected color " / TextBlock Width="248" Height="24" TextBlock.Text Binding ElementName="lbColor" Path="SelectedItem.Content"/ /TextBlock.Text TextBlock.Background Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBlock.Background /TextBlock TextBox Height="24" x Name="textBox1" Width="120" TextBox.Text !-- 双方向にバインドを形成する -- Binding ElementName="lbColor" Path="SelectedItem.Content" Mode="TwoWay" / /TextBox.Text TextBox.Background Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBox.Background /TextBox /StackPanel 上記のコードは問題があります。それはTextBoxへ入力された値がListBoxにバインドするためのバインドの実行が行われないという問題です。TextBoxコントロールがバインドを実行するタイミングは、フォーカスを失った時なのでフォーカスが失われない間はバインドが実行されません。(バインドが実行されるタイミングについて) Binding ElementName="lbColor" Path="SelectedItem.Content" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" / このように設定すると、プロパティが変更される度にバインドが実行されます。 OneWayToSourceモード バインドターゲットからバインドソースへ値を代入する バインドの実行タイミング バインドが実行されるタイミングはBinding.UpdateSourceTriggerの値によって決定されます。 Explicit BindingExpression.UpdateSource()のコールでのみバインドが実行 LostFocus コントロールからフォーカスが失われたときにバインドが実行 PropertyChanged プロパティの変更時にバインドが実行 OneWayモードのデータバインディングではデフォルトでPropertyChangedによるバインディングです。 TwoWayモードのデータバインディングでは、UIの種類によってタイミングは異なります。TextBoxではユーザーからの入力はLostFocusによってバインドソースへバインドされます。 PropertyChanged このバインドタイミングでバインドを実行するには、バインドソース(バインドターゲット)が INotifyPropertyChanged を実装し、PropertyChangedEventHandlerイベントを適切に呼び出すように実装します。(データオブジェクトによるバインド) LostFocus フォーカスが失われたときにバインドを実行します。 TextBoxなどユーザーからの入力を伴うコントロールでは、このバインドタイミングがデフォルトに設定されています。 コレクションのバインド データバインディングではバインドソースのコレクションをバインドできます。 しかし、バインドソースのコレクションをそのままバインドターゲットへバインドせずに、コレクションビューを作成しバインドソースとして使用します。 コレクションビューを使用する理由として、UIへの表示を行う際に並べ替え、フィルタ、およびグルーピングなどの処理を必要とするためです。コレクションビューを使用することで、直接バインドソースのコレクションを操作することなしに、並び替えなどのコレクションを使用できます。 ただし、バインドソースとするコレクションはINotifyCollectionChanged インターフェースを実装する必要があります。 コレクションビューの定義 Window Window.Resources c MyData x Key="myDataSources"/ CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" / /Window.Resources ... /Window コレクションビューは同一のソースを複数定義することもできます。 並べ替え・フィルタ・グルーピング 並び替えを設定するにはSortDescriptions属性を設定します。 SortDescriptionはコレクションの要素が持つオブジェクトのプロパティをPropertyNameで指定します。 並び替えの対象フィールドは複数設定することが可能です。 CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" !-- 並び替え設定「SortDescriptions」 -- CollectionViewSource.SortDescriptions scm SortDescription PropertyName="Category" Direction="Ascending" / scm SortDescription PropertyName="Age" Direction="Descending" / /CollectionViewSource.SortDescriptions /CollectionViewSource scm名前空間は次のようにルート要素に設定して使用してください。 xmlns scm="clr-namespace System.ComponentModel;assembly=WindowsBase" グルーピングを設定するにはGroupDescriptions属性を指定します。 CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" CollectionViewSource.GroupDescriptions PropertyGroupDescription PropertyName="Category" / /CollectionViewSource.GroupDescriptions /CollectionViewSource データオブジェクトによるバインド バインド機能を使用するには、INotifyPropertyChangedインターフェースを実装したクラスが必要です。 class Person INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public String name { get { return _name; } set { _name = value; firePropertyChanged("name"); } } protected void firePropertyChanged(string name) { if( PropertyChanged != null ) { // デリゲートの実行 PropertyChanged(this, new PropertyChangedEventArgs(name) ); } } private String _name; } firePropertyChanged()はプロパティが変更したことを知らせるイベント(デリゲート)を実行するメソッドです。引数はバインドのパス名で、上記の場合「firePropertyChanged("name")」とはバインドするプロパティ名である。 テキストボックスのTextプロパティにバインドする。 TextBox Name="tb" Text="{Binding Path=name}" / プロパティがバインドすることを簡単に記述するにはBindingマークアップ拡張を使用する。 バインドされるソースを上記のTextBoxに設定する必要があります。 通常はDataContextに設定を行います。 public Form() { tb.DataContext = person; } private Person person = new Person(); またはXAMLではプロパティは継承される為、TextBoxの上位の要素のDataContextに設定します。 Window Grid TextBox Text="{Binding Path=name}" / /Grid /Window // XAMLの分離コード public MainWindow Window { public MainWindow() { InitializeComponent(); Perons obj = new Person(); this.DataContext = obj; obj.name = "星井美希"; } } バインドターゲットとなるカスタムコントロールの作成 カスタムコントロールの作成はUserControlやPanelといったクラスを継承して作成すればいい。 ただし、カスタムコントロールでバインディング使う場合やWPFデザイナから値を設定するカスタムコントロールを作る場合は、依存関係プロパティという方法でプロパティを実装する必要がある。 実質すべての公開プロパティは依存関係プロパティで実装しなければならない。 依存関係プロパティの実装についてはこちら。 class MyControl UserControl, INotifyPropertyChanged { public string Idol { get { return (string)GetValue(IdolProperty); } set { SetValue(IdolProperty, value); } } /// summary /// Identifies the Value dependency property. /// /summary public static readonly DependencyProperty IdolProperty = DependencyProperty.Register( "Idol", typeof(string), typeof(MyControl), new FrameworkPropertyMetadata( string.Empty, // 初期値 FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnIdolChanged) ) ); private static void OnIdolChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Console.WriteLine("Call OnIdolChanged"); Console.WriteLine("\t 古い値={0}", e.OldValue); Console.WriteLine("\t 新しい値={0}",e.NewValue); } }
https://w.atwiki.jp/atachi/pages/31.html
スタイルの使用方法 [#a5912b9b] 特定の要素にスタイルを適応 [#u3f765b2] スタイルを継承 [#f923f2e2] テンプレート [#c1ac1a97] データテンプレート [#v289532d] データテンプレートをクラスに適応させる [#x6c68de8] テンプレート内にリソースを適応させる [#e9d96c52] DataTemplateとバインドソース [#o6d284ae] コントロールテンプレート [#j961ba65] トリガー [#pb4f2efd] WPFのスタイルは、スタイルという名前ですがデザインやカラー設定を行うためだけの機能ではありません。 スタイルを定義するにはStyle要素を使用します。Style要素内ではコンポーネントのプロパティ値の設定やデータのプロパティ値の設定ができます。 データテンプレートでは再利用可能なデータバインディングを持ったスタイルを定義します。 コントロールテンプレートでは既存のコントロールのUIデザインを定義できます。 スタイルの使用方法 スタイルはXAMLのResourcesに記述します。 Style.TargetType属性の指定し、XAMLデザイナがSetter要素のPropertyの値を検証するためにも使用します。 Setter要素の値はValue属性に記述することもできますし、次のようにプロパティ要素として記述することもできます。 Setter Property="PropertyA" Setter.Value プロパティ要素 /Setter.Value /Setter 次のコードはXAML内のすべてのTextBlock要素にスタイルが適応されます。 Window.Resources Style TargetType="TextBlock" Setter Property="HorizontalAlignment" Value="Center" / Setter Property="FontSize" Value="14" / Setter Property="FontFamily" Setter.Value Comic Sans MS /Setter.Value /Setter /Style /Window.Resources Grid TextBlock Text="ようこそ。" / TextBlock Text="今日は12月8日です。" / /Grid スタイルだけを先に定義し、各VisualObjectからスタイルを参照したい場合、Style.TargetStyle属性を使用せずにx Key属性を使ってスタイルの定義だけを行います。 Window.Resources Style x Key="MyStyle" Setter Property="TextBlock.HorizontalAlignment" Value="Center" / Setter Property="TextBlock.FontSize" Value="14" / Setter Property="TextBlock.FontFamily" Value="Comic Sans MS" / /Style /Window.Resources 特定の要素にスタイルを適応 Style要素の定義時にx Key要素でスタイルに名前をつけた場合、スタイルが適応されるには明示的にスタイル名を指定する必要があります。 次の例では2つのTextBlockのうち、1番目のTextBlockだけにスタイルが適応されます。 Window.Resources Style x Key="MyStyle" TargetType="TextBlock" Setter Property="HorizontalAlignment" Value="Center" / Setter Property="FontSize" Value="14" / Setter Property="FontFamily" Value="Comic Sans MS" / /Style /Window.Resources Grid TextBlock Text="ようこそ。" Style="{StaticResource MyStyle}" / TextBlock Text="今日は12月8日です。" / /Grid スタイルを継承 Style.BaseOn属性を使用してスタイルを継承し、そこから設定済みプロパティの再設定やプロパティの追加が行えます。 Window.Resources Style TargetType="TextBlock" Setter Property="FontSize" Value="20"/ /Style Style x Key="MyColorStyle" TargetType="TextBlock" BasedOn="{StaticResource {x Type TextBlock} }" Setter Property="Foreground" Value="#FFC13B3B" / /Style /Window.Resources Grid StackPanel Height="100" HorizontalAlignment="Left" Name="stackPanel1" VerticalAlignment="Top" Width="200" TextBlock Height="23" Name="textBlock2" Text="TextBlock" / TextBlock Height="70" Name="textBlock1" Text="よだー" Style="{StaticResource MyColorStyle}"/ /StackPanel /Grid MyColorStyleは既存のTextBlockのスタイルを継承しています。 テンプレート データテンプレート コントロールテンプレート それぞれUIの描画スタイルを設定する手法で、再利用可能なことからテンプレートと呼ばれている。 データテンプレートとは主にコレクションをアイテムとして表示するコントロール(ListBox、ListView、TreeView、DataGrid、その他)で、そのアイテムを描画するためのUIを定義したものです。 コントロールテンプレートとはUIの描画そのものを再定義するものです。Buttonコントロールは1つのコントロールに見えますが内部ではGridやTextBlockを組み合わせて1つのコントロールとして描画しています。 データテンプレート VisualObjectを持つスタイルをデータテンプレートと呼びます。 データテンプレートではデータを表示する為のオブジェクト要素構造をテンプレート化し、UIデザインとデータの両方の再利用を実現できます。 テンプレート化したオブジェクト要素構造は、バインディングによって動的に表示内容を変更するように設計します。 次のサンプルでは、ListBoxに設定したデータソースの要素を描画する際に、各要素を描画するためのテンプレートを定義しています。 ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList} }" ListBox.ItemTemplate DataTemplate StackPanel TextBlock Text="{Binding Path=TaskName}" / TextBlock Text="{Binding Path=Description}"/ TextBlock Text="{Binding Path=Priority}"/ /StackPanel /DataTemplate /ListBox.ItemTemplate /ListBox データテンプレートはリソースとして定義できます。次のように予めリソースとして定義しておきx Key属性で指定した名前を定義しておけば、データテンプレートの再利用が可能です。 ListBox.ItemTemplateへはStaticResourceを使用してリソースを呼び出します。 Window xmlns local="clr-namespace my" Window.Resources ObjectDataProvider x Key="myTodoList" ObjectType="{x Type local Tasks}"/ DataTemplate x Key="myTemplate" StackPanel TextBlock Text="{Binding Path=TaskName}" / TextBlock Text="{Binding Path=Description}"/ TextBlock Text="{Binding Path=Priority}"/ /StackPanel /DataTemplate /Window.Resources !-- リソースに定義した「myTemplate」をデータテンプレートに使用する -- ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList} }" ItemTemplate="{StaticResource myTemplate" / /Window namespace my { public class Tasks ObservableCollection Task { public Tasks() { this.Add(new Task{TaskName="テレビを見る", Description="水戸黄門", Priority=3}); this.Add(new Task{TaskName="電話", Description="佐藤さんに電話", Priority=10}); this.Add(new Task{TaskName="勉強", Description="C#の勉強に明け暮れる", Priority=5}); } } public class Task { public string TaskName { get; set; } puiblic string Description { get; set; } public int Priority { get; set; } } } データテンプレートをクラスに適応させる DataTemplate.DateType を使用すると特定のオブジェクトすべてにデータテンプレートを適用することができます。 この仕組みは 非常に重要 で、任意のC#コードで記述されたクラスに対してXAMLによるUIのデザインを設定できます。 次のサンプルではListBox.ItemTemplateへデータテンプレートの設定を行っていません。しかし、正常に動作します。 これはListBoxがTaskオブジェクトを表示する際に、DataTemplateによって設定されたデータテンプレートが使用されている為です。 Window xmlns local="clr-namespace my" Window.Resources ObjectDataProvider x Key="myTodoList" ObjectType="{x Type local Tasks}"/ DataTemplate DataType="{x Type local Task}" StackPanel TextBlock Text="{Binding Path=TaskName}" / TextBlock Text="{Binding Path=Description}"/ TextBlock Text="{Binding Path=Priority}"/ /StackPanel /DataTemplate /Window.Resources ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList} }" / /Window テンプレート内にリソースを適応させる ComboBoxなどアイテムソースを受け取るコントロールでは、表示させるアイテムをItemsSourceプロパティなどに設定します。 通常はItemsSourceプロパティにはバインディングやリソースを行って項目を指定します。 しかし、データテンプレート内でバインディングを指定する場合には注意が必要です。 バインディングを使用する場合、バインドソースはデータテンプレートに与えられたアイテムになります。(ItemsSourceに設定されたコレクションの各要素がバインドソースとなる) データテンプレート内ですべてのComboBoxに同じ選択肢を表示したい場合には StaticResourceマークアップ拡張 を使用します。 Window.Resources src MyList x Key="myList" / col ArrayList x Key="MyDataSource" sys DateTime 1/2/2003 5 00 00 /sys DateTime sys DateTime 4/5/2006 13 13 13 /sys DateTime sys DateTime 7/8/2009 23 59 59 /sys DateTime /col ArrayList /Window.Resources Grid ListView ItemsSource="{StaticResource MyDataSource}" ListView.View GridView GridViewColumn Header="月" DisplayMemberBinding="{Binding Month}" / GridViewColumn Header="日" DisplayMemberBinding="{Binding Day}" / GridViewColumn Header="日付" DisplayMemberBinding="{Binding DayOfWeek}"/ GridViewColumn GridViewColumn.Header TextBlock Text="何か選択" / /GridViewColumn.Header GridViewColumn.CellTemplate DataTemplate ComboBox Name="comboBox1" Width="100" ItemsSource="{StaticResource ResourceKey=myList}" / /DataTemplate /GridViewColumn.CellTemplate /GridView /ListView.View /ListView /Grid class MyList List string { public MyList() { this.Add("日本"); this.Add("韓国"); this.Add("北朝鮮"); this.Add("中国"); this.Add("台湾"); this.Add("フィリピン"); this.Add("タイ"); this.Add("ベトナム"); } } DataTemplateとバインドソース ContentPresenter Name="stp1" Content="WPFは複雑" Grid.Row="1" Grid.Column="1" Height="22" Margin="9,0,0,0" ContentPresenter.ContentTemplate DataTemplate TextBlock Text="{Binding}" / /DataTemplate /ContentPresenter.ContentTemplate /ContentPresenter 親要素のContentが参照される この例では、TextBlockは「WPFは複雑」と表示されます。 理由は純粋に、ContentプロパティがInhert属性のプロパティなので、ContentPresenterがテンプレートを使ってビジュアルツリーを構築する際に、TextBlock.ContentもContentPresenter.Contentを参照します。 コントロールテンプレート コントロールテンプレートではコントロールの構造と外観を定義します。 スタイルとしてコントロールテンプレートを適応することで、コントロールの構造や外観を再定義することができます。 コントロールテンプレートはControlクラスを継承した多くのコントロールに対して適応できます。 参考 MSDN コントロールテンプレートを適応するというのは、そのコントロールのビジュアルツリーを書き換えることを意味します。 ただし、コントロールのビジュアルツリーの一部だけを書き換えることはできません。 カスタムコントロールテンプレート例 タブ トリガー プロパティの値を判断し、動的に任意のプロパティ値を設定することができる。 if構文と違い、判断するデータソースや設定可能なデータソースは限られている。 データテンプレートで使用する場合は、そのデータがデータソースとなる。(ItemsSource属性を持つComboBoxやListBoxの場合、各要素をデータテンプレートを使って表示する際の各要素がデータソースとなる) よって、プログラマが自由なデータソースを指定し、その値を動的に評価して処理を分岐するといったif構文のような処理は行えない。
https://w.atwiki.jp/iguxu/pages/27.html
source データ集。 画像データは現画面から取得できるけど、それ以外の形式ファイルもあるのでその際は画面下の"アップロード"からデータを取得してください。 memo 更新情報を載せます mail 適当にメモ代わり. メール topへ 戻る