Contenu connexe Similaire à 僕がやったXaml戦略 (20) Plus de Hiroyuki Mori (14) 僕がやったXaml戦略2. 自己紹介
森 博之(もり ひろゆき)
MS開発技術を専門としたフリーランスエンジニア
Microsoft MVP for Visual C#
極東IT-Engineers 代表
ブログ:もり ひろゆきの日々是勉強
http://moriblog.kit-eng.com
Twitter
Windows8対応[基本+実用]
Windowsストアアプリ開発入門 好評発売中!
5. 私とXAML
XAMLとの出会い
WPF/E(Windows Presentation Foundation / Everywhere)
現在→WPF/Windows Phone(Silverlight)/Windowsストアアプリ
XAMLの説明を読んだ第一印象
XMLかぁ・・・設定ファイルみたいなのはやだなぁ・・・。
宣言型マークアップ言語
そんなに浸透するのかなぁ?
アプリを作成するためにXMLとC#を行き来して・・・
結局多くのアプリ開発はデザイナーとコードを行き来する
7. XAMLとは
eXtensible Application Markup Language
XMLベースの宣言型マークアップ言語
→XMLの規約が適用されている
必要がない場合は変数宣言を行わなくともよい
オブジェクトのインスタンス化スクリプト
<Button Content=“Click” />
[C#]var btn = new Button() { Content = “Click” };
[VB]Dim btn = New Button With { .Content = “Click” }
8. XMLの規約を踏襲しているので・・・
利用されている文字コードはUTF-8
XML Namespaceによってアセンブリをマッピング!
WPF/Windows Phone(Silverlight)/Windowsストアアプリで方言がある!
URI形式:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WinStoreApp:xmlns:local="using:_01_WindowsStoreAppXaml"
WPF: xmlns:usercontrol="clr-namespace:Wpf.Lib;assembly=WpfControlLibrary1"
WP(SL):xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
16. 依存関係プロパティの実装例
public class MyText : DependencyObject
{
public static readonly DependencyProeprty TextProperty =
DependencyProperty.Register(“Text”, typeof(string),
typeof(MyText));
public string Text
{
get { return (string) this.GetValue(TextProperty); }
set { this.SetValue(TextProperty, value); }
}
}
<MyText Text=“テキスト” />
18. プロパティ変化の通知
INotifyPropertyChanged
public class Person : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private string name;
public string PersonName {
get { return name; }
set {
name = value;
OnPropertyChanged("PersonName");
}
}
protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
21. マークアップ拡張の作成
<TextBlock Text=“{demo:Hello}” />
using System;
using System.Windows.Markup;
namespace BindingDemo
{
public class HelloExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return "Hello";
}
}
}
今回は仕組みを理解してもらうために作
成方法を説明しましたが、マークアップ
拡張の自作は可読性を落とす原因となり
えるため注意が必要です。
だいたいの場合、データバインディング
で解決できるはずですので、まずはデー
タバインディングで解決できないか検討
しましょう。
26. Animation対象の設定
Storyboardを利用
Storyboard
直訳すると絵コンテ
XAML系ではAnimationオブジェクトを複数内包するChildrenプロパティを持つ
Animationの値設定はStoryboardへ添付プロパティで行う
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyTextBox"
Storyboard.TargetProperty=“FontSize”
From="1.0" To="0.0" Duration="0:0:1" />
</Storyboard>