読者です 読者をやめる 読者になる 読者になる

atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

ConverterにPropertyはやしてみた。

にゃんぱすー。XAML Advent Calender 4日目ですの。
XAML Advent Calendar 2013 - Adventar]


Parameterだけじゃ限界があったので、ConverterにPropertyはやしてみた。

例えばToggleButtonがOnの時、TextBlockの文字の色を緑に、Offの時は白に、なんていうシチュエーション。
f:id:c-mitsuba:20131204023037p:plain

普通にコンバータを書けばこんなかんじになりますね。

#region

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;

#endregion

namespace PhoneApp1
{
    public class BoolToColorConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool?)value == true ? new SolidColorBrush(Colors.Green) : new SolidColorBrush(Colors.White);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

このコンバータをちょっとprop tab tabして、Trueの時とFalseの時の色をプロパティで設定できるようにしてみました。

#region

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;

#endregion

namespace PhoneApp1
{
    public class BoolToColorConverter2 : IValueConverter
    {
        public Color TrueColor { get; set; }
        public Color FalseColor { get; set; }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool?)value == true ? new SolidColorBrush(TrueColor) : new SolidColorBrush(FalseColor);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

PhoneのBlendの場合、型に合わせて候補も出してくれます。
さすが電話!!!インテリセンス素敵ですね。
f:id:c-mitsuba:20131204023527p:plain
f:id:c-mitsuba:20131204023534p:plain

もちろん1ページに挙動の同じコンバータで挙動のちがうものを用意することも可能です。
f:id:c-mitsuba:20131204024113p:plain

Store AppsとかだとBehaviorが貧弱すぎて、Converterは必須になってきてる。
Converterはオブジェクトパネルに見えないので、手書きでプロパティ設定してあげないといけない
こんなかんじにプロパティで設定してやれば、ベタにかくより使い回しが効いていいんじゃないかなー。
作ったConverterはまとめて、自分のライブラリにしてしまえばいいと思います。



ハードルは下げておきました!!!

明日はたなかさんがすてきな記事をかいてくれるはずです!!