コントロールの左右反転を簡単に
#wp7dev_jp
実行時に、例えばimageコントロールを左右反転したい。そんな時はどうしたらいいか。こういう時にXAML+C#が便利。
簡単反転
まずは画面定義側。
<Image Source="Images/myImage.png" RenderTransformOrigin="0.5,0.5" >
<Image.RenderTransform>
<CompositeTransform x:Name="invert" ScaleX="1"/>
</Image.RenderTransform>
</Image>
そして、コード側です。反転するたびに呼び出せばOK。
private void InvertControl()
{
invert.ScaleX *= -1;
}
ポイントはXAMLで定義して、インスタンス名(invert) を付けておくこと。これで簡単に設定ができる。
Bindで実装するには
その他チェックボックスなどと、Bindすることも面白いが、そういうときのために Boolean ←→ +1/-1 のコンバーターを作っておくといいかも。Boolean to Visibility コンバーターも便利。
public class BooleanToInvertConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return -1;
else
return (bool)value ? 1 : -1;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value == 1;
}
}
使うときはこんな感じ (Blendで指定できないので注意)
<phone:PhoneApplicationPage.Resources>
<local:BooleanToInvertConverter x:Key="BooleanToVisibilityConverter"/>
</phone:PhoneApplicationPage.Resources>
:
<Image x:Name="image1" Stretch="None" Source="/myapp;component/cat.jpg" RenderTransformOrigin="0.5,0.5" >
<Image.RenderTransform>
<CompositeTransform x:Name="invert"
ScaleX="{Binding IsChecked, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=checkBox1}"/>
</Image.RenderTransform>
</Image>
<CheckBox Content="CheckBox" x:Name="checkBox1"/>
結果:もこな、このころは小さくてかわいかったなぁ。