約 5,011,078 件
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/silver_emblem/pages/33.html
開発技術系トップへ戻る Windows Presentation Foundation(WPF) .NET Framework 3.0に含まれるユーザインタフェースサブシステムである。 WPFは、ユーザインタフェースとロジックを明確に区別する一貫したプログラミングモデルを提供する。 WPFアプリケーションはデスクトップで実行するだけでなくウェブブラウザ上で配置・実行することができる。 WPFによって、以下の表現手法を統一的に利用することが出来る。 ユーザインタフェース、2Dおよび3Dオブジェクトの描画 ベクトルグラフィックス ラスタグラフィックス アニメーション、音声および動画の再生 .NET Framework 3.0はWindows Vistaにプリインストールされており、Windows XP SP2およびWindows Server 2003でも利用できる。 【グラフィックス】 ウインドウを含め、全てのグラフィックスはDirect3Dを介して描画される。 これにより、高度なグラフィックを単一の方法で利用することができる。 Direct3Dを通して描画することにより、ビデオカード上のGPUに描画処理を任せることが可能になる。これはCPUの負荷を軽減することにつながる。 ベクトルグラフィックスをサポートする。これは損失のない拡大縮小を可能にする。 3Dモデルのレンダリングや相互作用をサポートする。 【配置】 WPFは通常のスタンドアローンアプリケーションだけでなく、XAMLブラウザアプリケーション (XBAP) として配置することもできる。 スタンドアローンアプリケーションは、ClickOnceやMicrosoft Windows Installer (MSI) などのインストーラによってローカルコンピュータ上に配置されるアプリケーションである。 XAMLブラウザアプリケーション (XBAP) は、Internet Explorerなどのウェブブラウザによってホストされるアプリケーションである。コンピュータリソースへのアクセスやWPFの機能は一部制限される。 【相互互換性】 Windows Formsとの相互運用も可能である(ElementHost、WindowsFormsHostクラス)。 【マルチメディア】 WPFはブラシ、ペン、幾何図形、変形などの基本的な2Dグラフィックス機能を提供する。 WPFで提供される3D機能はDirect3Dのサブセットである。しかし、WPFではよりユーザインタフェース (UI) などの要素に密接に利用することができる。これによって3DのUI、文書、メディアなどが可能になる。 一般的な画像フォーマットをサポートする。 WMV、MPEG、AVIフォーマットの動画をサポートする。 時間ベースのアニメーションをサポートする。これはシステムのパフォーマンスに依存せずアニメーションのスピードを一定に保つ。 ClearTypeを利用したテキストレンダリングをサポートする。また、OpenTypeフォントの機能もサポートする。 ※ClearType 関連・・・Microsoft SilverLight
https://w.atwiki.jp/atachi/pages/48.html
WPFが実装しているコントロールは、旧フォームや他のGUIのフレームワークと比べるとま非常に貧弱なので注意が必要。 フォーム中心のアプリケーションの開発を行うならば、今はまだフォームアプリケーションプロジェクトでの開発がいいのかもしれません。 目次 記事の紹介 [WPF][C#]CheckedListBoxを作ろう 目次 XAMLイベントグラフィックスコマンドコンポーネントコンテナコントロールChartColorPickerMicrosoft Outlook Appointment ViewMonthview CalendarNotifyMessagePropertyGridコンボボックスタブコントロールチェックボックスリストボックスツリーコントロールテキストボックスバリデーションデータグリッドリストビューリストボックススタイルデータバインディング依存関係プロパティ 記事の紹介 [WPF][C#]CheckedListBoxを作ろう かずきのBlog CheckedListBoxを作ろう 各項目にチェックボックスがついたListBoxの実装方法と説明。
https://w.atwiki.jp/daiseisenbura/pages/29.html
他の2ch専用ブラウザを使用したことがある方なら、このWikiのカスタマイズ版JaneStyleを見て 少し使いづらいとは思わなかったでしょうか? それは、このJaneStyleがスレッド一覧とスレッドを別々に表示するようになっていたからでしょう。 もちろんJaneStyleも伝統的な"板一覧"と"スレッド一覧"と"スレッド"を同時に表示する 2ch専用ブラウザの伝統的なスタイルに対応しています。 というか、この3ペイン(窓)表示が本家JaneStyle標準のレイアウト方法です。 それでは画面の表示を切り替える方法を説明します。 まず画面左上の”2⇔3ペイン切替”ボタンをクリックします 図を見る すると、スレッド一覧とスレッドが同時に表示されます 図を見る このままだと"メモ欄"(画面下部の書き込み窓)が邪魔なので画面下の"ステータスバー"をクリックして"メモ欄"を閉じます 図を見る これで、"板一覧"と"スレッド一覧"と"スレッド"が同時に表示される、伝統的な3ペイン(窓)表示になりました 図を見る 以上で画面の切り替えは終了です。 この表示スタイルの時は、"メモ欄"(画面下部の書き込み窓)が邪魔になるので、 スレッド窓右上の"レス"ボタンから書き込みをする人が多いようです。 (伝統的な2ch専用ブラウザの書き込み方法がこのような書き込みだったため、 この方法になれている人が多いだけかも知れませんが) 図を見る また、このJaneStyleは新しく選択したスレッドを新規タブで開くようにしてあるので、 新しくスレッドを開くとこのようになります。 図を見る 自分の見る板や、2ちゃんねる利用のスタンス、はたまた好みによって使いやすい画面表示のさせ方は 異なると思うのですが、このWikiを見て初めて2ch専用ブラウザを使ったという方も、 是非、この表示方法をお試しください。 "!"ボタンのソートなどを組み合わせると、大生板でも複数のスレッドに横断して常駐する場合、とても便利ですよ。 べんりきのう-AA入力支援機能へ戻る メニューバーを表示するへ進む
https://w.atwiki.jp/osinko/pages/123.html
<WPFを使う上で必ず理解する必要がある重要なもの> 添付プロパティ Attached Property コンテナとなる親のプロパティを子で設定する。例:親からの相対位置座標などのプロパティ 値の包含継承 WPFではFontSizeプロパティなど一部のプロパティ値は親要素から継承するようになっている 依存関係プロパティ バインディング データコンテキスト ビューとモデルの接点にすると良いプロパティ。子のBindingの参照に継承される データーテンプレート <添付プロパティの例> Canvas Width="400" Height="300" Rectangle Canvas.Left="30" Canvas.Top="30" Width="50" Height="50" Fill="Red"/ /Canvas Rectangleの「Canvas.Left="30" Canvas.Top="30"」は親からの添付プロパティとなる <詳細できめが細かい資料> 資料:XAMLの細かい仕様を知ることができる:WPFのXAML XAML 名前空間 (x ) 言語機能 <学習中ひきだし> https //www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%EF%BC%B7%EF%BC%B0%EF%BC%A6+ImageDraw&num=50#hl=ja&lr=lang_ja&tbs=lr lang_1ja&sclient=psy-ab&q=%EF%BC%B7%EF%BC%B0%EF%BC%A6+Image+Draw&oq=%EF%BC%B7%EF%BC%B0%EF%BC%A6+Image+Draw&gs_l=serp.3..0i19j0i10i30i19j0i30i19l3j0i10i30i19l2j0i30i19.584873.584873.0.585193.1.1.0.0.0.0.147.147.0j1.1.0...0.0...1c.1.55ciRH8WXOU&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&fp=394a8366997e8620&biw=1897&bih=937 http //msdn.microsoft.com/ja-jp/library/ms749287.aspx← http //msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.selector.selectedvalue.aspx http //ufcpp.net/study/dotnet/wpf_xamladv.html http //msdn.microsoft.com/ja-jp/library/ff602279.aspx http //code.msdn.microsoft.com/windowsdesktop/MVVM-d8261534 チュートリアル WPF の概要 データ バインディングに関する「方法」トピック パネルの概要 グラフィックスとマルチメディア アニメーションの概要 チュートリアル WPF デザイナーによるデータ バインディングの作成 チュートリアル WPF デザイナーでの XAML の編集 データ バインド (WPF) XAMLの細かい仕組みの説明:XAML の概要 (WPF) XAML とコードのチュートリアル <何時か役立つときが来るかもしれないメモ> C# または Visual Basic を使った Metro スタイル アプリのためのロードマップ クイック スタート コントロールの追加とイベントの処理 (C#/VB/C++ と XAML を使った Metro スタイル アプリ) クイック スタート コントロールのスタイル (C#/VB/C++ と XAML を使った Metro スタイル アプリ)
https://w.atwiki.jp/osinko/pages/117.html
<サンプルコード> オブジェクトコレクションをXAMLの中で作成しリストボックスにバインド、さらにテキストボックスに選択したアイテムをバインドさせる バインディングコーディング_例 値の有効性(ルール)の適用(バインディングで行う) リソースコーディングorリソースプロパティウインドウ操作例 スケールセレクタの作成例(コンボボックスとXMLデータプロパイダオブジェクトとのバインディング) 画像をタイリングして領域を塗りつぶす CLRオブジェクトをXAML形式のファイルで出力する XAMLを使わずCLRでコントロール等を配置 Contentプロパティの利用例 依存プロパティ、DependencyObject、Bindingの実装のサンプル データコンテキストの仕組み StyleとSetterの適用範囲のサンプル コレクション走査パス+匿名クラス+日本語変数の利用 WPFでのマルチスレッド処理のサンプルコード 破線ラインの描画 (基礎的で重要な考えなのでよく理解しておく事:INotifyPropertyChangedを利用している。これはDependencyObjectで自動実装できるので利用する機会は少ない)CLRコードでバインディングを作成する C#WPF WPFでファイルを開くコモンダイアログを使用する 追加資料:Microsoft.Win32 ObservableCollection(T) クラス ObservableCollection を作成およびバインドする
https://w.atwiki.jp/sapmania_bi70_delta/pages/24.html
7.0機能ベースのデータフローではデータソース機能が大きく変わり、PSAの利用が必須となった。インフォパッケージは最初にPSAにのみデータを書き込むようになった。 ※名称は同じであるが3.xデータソースとはオブジェクトが異なる 名前 コメント
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/osinko/pages/115.html
<資料> XAML 名前空間 (x ) 言語機能 XAML とコードのチュートリアル リソースを作成して適用する方法 XAML デザイナーでデータをバインドする方法 C#で書いたクラスをWPFのXAML上でインスタンス化したい場合、まずXAMLのカスタムプレフィクスを定義してアセンブリの型を XAML で参照できるようにする必要がある 資料: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」の名前でこのオブジェクトにアクセスできる この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で利用するセットを名前空間で設定している(・・・クラスライブラリの外部サーバーへの配置。クラウド化みたいな考えで良いのかな?) 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側で設定したキー