2000条あなたが知るべきWPF小姿勢基礎編<1-7>

11801 ワード

本文が始まる前に誰かを紹介する必要があります:Sean Sexton.ミネソタ双城からのソフトウェアエンジニアは、C#とWPFに深い情熱を持っています.最も優れているのは、2,000 Things You Should Know About C# 2,000 Things You Should Know About WPFの2つのブログを維持していることです.ブログの名前を聞いて、この人がどんなに偉いかわかるでしょう.彼は微博式のような150字の短い言語で毎日WPFとC#の重要で忘れやすい知識を更新している.Followのブログもしばらくありますが、皆さんに共有してほしいです.
このシリーズは私が彼のすべてのtipを翻訳するだけではなくて、自分の開発の中の見方と見解にも参加して、もっと近い言語でマスターの風貌を展示することを望んでいます.このシリーズは私も彼と同じように堅持して、毎日の進歩が偉大になることを望んでいます.
もし皆さんがこの偉大なプログラマーをもっと知りたいなら、これはインタビューリンクです.彼はインタビューの中で自分の生涯とプログラミングに関する勉強についての見方を話しています.私は皆さんに役立つと思います.時間があれば、後でこのインタビューを翻訳する文章を出して皆さんに読んでもらいたいと思っています.注目してほしいです.
 
ここで丁寧に説明します.このシリーズはSean Sexton氏の英語ブログに基づいており、Sean Sextonはすべての著作権と取り消し権利を持っている.
 
[小九の学堂は、平凡な言葉で平凡ではない技術を記述することに力を入れている.転載するには、出所:九ちゃんの学堂.cnblogs.com/xfuture]
 
  #1. WPFとは
WPF(Windows Presentation Foundation)は.Net Frameworkは3.0から新しいマルチメディアインタラクティブユーザーグラフィックインタフェースを提供するクラスライブラリに加入し、本当に開発と設計の分離を行った.WPFプログラムは、デスクトップ上で実行するもよいし、WEBブラウザ上で実行するもよい.
WPFは画面解像度とは独立した3 Dベクトルグラフィック要素を用いてグラフィックレンダリングを行う.DirectXハードウェアアクセラレータを使用してグラフィック要素をレンダリングします.より絢爛たる色彩とクールな効果をもたらした.Net 3.0以降、WPFはWindows Formに代わって次世代のWindowsクライアント技術となった.
 
  #2. グラフィックレンダリングレベル(Rendering Tiers)
WPFアプリケーションは、グラフィックスカードの動作能力を自動的にチェックし、レンダリング能力値に割り当てます.グラフィック階層で実行できる機能を示します.
レベルTier 0-ハードウェアアクセラレータがなく、すべてソフトウェアで描画されます.
レベルTier 1-ハードウェアアクセラレータの一部を使用するには、DirectXバージョンが9.0より高い必要があります.ハードウェア加速部:ラジアルグラデーション(Radial gradients)、3 Dハイライトグラフィック計算(3 D lighting calculations)、文字レンダリング(Text rendering)、3 Dアンチエイリアシング(3 D anti-aliasing).
レベルTier 2-ほとんどがハードウェアアクセラレータを使用します.Directxバージョンが9.0より高い
現在のレンダーレベル方法を取得するには、次の手順に従います.
 
int renTier = (RenderCapability.Tier >> 16);
MessageBox.Show(string.Format("Tier = {0}", renTier));

 
  #3. 解像度に関係なくベクトルグラフィックス
WPFでは、ビットマップではなくベクトルがグラフィックレンダリングに使用されます.既定のコントロールでもカスタムスタイルの画像でも解像度には関係ありません.
WPFは、ビットマップの代わりに画面上でグラフィックの各画素をレンダリングする方法で、ベクトルは形状、線、ポリゴンなどの基礎的なセルを描画します.
WPFはベクトルグラフィックス描画を使用するため、ユーザインタフェース要素は実際のデバイスの解像度とは独立してレンダリングされる.WPFによって描画された画像サイズは、装置に関係なく1/96インチの単位で使用される.これは、ユーザインタフェースの要素が常に指定されたサイズを呈し、解像度(DPI)に影響されないことを意味する.
  
  #4. WPFレイアウト(Layout)
WPFは、正確なピクセル座標を使用してコントロールの位置を決定するのではなく、フローレイアウトモデルを使用して要素の位置決めを行う.記述言語XAMLを使用して位置決めを行い、HTMLやCSSのWebレイアウトのようなシンプルで便利です.
フローレイアウトモデルは、WPFレイアウトをウィンドウに合わせて動的に調整し、フロー状態を示すことができる.WPF界面の大きさは解像度とは無関係である.
すべてのWPFコントロールは1つのコンテナ(Container)に搭載されており、主流のコンテナはGrid、DockPanel、StackPanel、WrapPanelである.
  
  
  #5. スタイル(Style)
スタイルは、CSS機能と同様の属性値を設定するために再利用可能なセットです.これをリソースとして保存し、複数のコントロールに適用できます.例を挙げると、アプリケーション内のすべてのbuttonはスタイルであり、静的リソース(StaticResource)としてスタイルを定義する必要があります.
 
<Window.Resources>
    <Style x:Key="StdButton" TargetType="Button">
        <Setter Property="Width" Value="100"/>
        <Setter Property="Control.Background" Value="AliceBlue"/>
        <Setter Property="Control.FontFamily" Value="Calibri" />
        <Setter Property="Control.FontWeight" Value="Bold" />
    </Style>
</Window.Resources>

スタイルが必要なbuttonに適用できます
 
<Button Content="I'm Tiny Nine" Style="{StaticResource StdButton}" />
<Button Content="Follow Me" Style="{StaticResource StdButton}" />
<Button Content="Not Follow me"/>

  
  #6. テンプレート(Template)
テンプレートはスタイル(Style)と似ていますが、実際には異なります.テンプレートはUIコントロールの外観を変更できますが、動作を変更することはできません.一般的にTemplateはStyleで定義されています.WPFの各コントロールにはデフォルトのテンプレートがあり、デフォルトのテンプレートの代わりにテンプレートを作成して個人的なカスタマイズを行うことができます.
テンプレートのプロパティを変更することで、テンプレートを変更します.次の例では、青い枠線を厚くした新しいbuttonを作成します.
  
<Window.Resources>
    <ControlTemplate x:Key="Crazy" TargetType="Button">
        <Border BorderBrush="Blue" Background="White" BorderThickness="3">
            <ContentPresenter></ContentPresenter>
        </Border>
    </ControlTemplate>
</Window.Resources>
<Grid Height="auto" Width="503">
    <StackPanel Height="100" HorizontalAlignment="Left" Margin="85,139,0,0" Name="stackPanel1"  >
        <Button Content="Crazy template" Template="{StaticResource Crazy}"  />
        <Button Content="Default template" />
    </StackPanel>
</Grid>

  
  #7. コマンド(Commands)
WPFはコマンド(Commands)のサポートを提供し,CommandはWPFでイベントの進化体である.WPFはCommandを空間にバインドし,重複するイベントコードを低減することができる.複数のコントロールで同じCommandロジックを使用できます.CommandはUIと論理を分離することができ,UI操作を実現し,バックグラウンドでコマンド論理を実行する.WPFプログラムには,Paste,Copy,Saveなど多くのコマンドが内蔵されている.
次のコードでは、コントロールバインドコマンドの2つの方法を示します.
  
<Button Content="New" Command="ApplicationCommands.New"/>
 
 
// Create binding--which binds the command to your code
CommandBinding binding = new CommandBinding(ApplicationCommands.New);
binding.Executed += new ExecutedRoutedEventHandler(CommandNew_Executed);
this.CommandBindings.Add(binding);
 

 
 
2014-05-22は後続8-14を更新しますので、お楽しみに.