2013年01月15日

[C# WPF]キャンバスの倍率を設定できるようにする

Canvasにはさまざまな図形を配置する事ができますが、
今回はCanvasの表示倍率を変更できるようにします。

サンプルです。

[xaml]

<Window.Resources>
<x:Array x:Key="ScaleItems" Type="s:Int32">
<s:Int32>200</s:Int32>
<s:Int32>100</s:Int32>
<s:Int32>75</s:Int32>
<s:Int32>50</s:Int32>
<s:Int32>25</s:Int32>
</x:Array>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ComboBox ItemsSource="{StaticResource ScaleItems}"
SelectedValue="{Binding Scale, UpdateSourceTrigger=PropertyChanged}"
Width="70" Height="23" Margin="5" HorizontalAlignment="Left"/>
<Canvas Grid.Row="1">
<Canvas.RenderTransform>
<ScaleTransform ScaleX="{Binding CanvasScale}" ScaleY="{Binding CanvasScale}"/>
</Canvas.RenderTransform>
<Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="40" Fill="Red"/>
<Ellipse Canvas.Left="200" Canvas.Top="30" Width="80" Height="80" Fill="Blue"/>
</Canvas>
</Grid>


[ソース]

public partial class MainWindow : Window, INotifyPropertyChanged
{
public int Scale
{
get { return (int)CanvasScale * 100; }
set { CanvasScale = value / 100.0; }
}

private double canvasScale = 1.0;
public double CanvasScale
{
get { return canvasScale; }
set
{
if (value > 0)
{
canvasScale = value;
}
OnPropertyChanged("CanvasScale");
}
}

public MainWindow()
{
InitializeComponent();

this.DataContext = this;
}

public event PropertyChangedEventHandler PropertyChanged = (s, e) => { };

private void OnPropertyChanged(string name)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}


ComboBoxで倍率を設定します。
ComboBoxのリソースはxamlで定義しています。

倍率はCanvas.RenderTransformのScaleTransformに設定します。
設定値は0.0〜1.0の値になります。

ComboBoxで設定する値は%の値なので
ソースのプロパティで相互変換しています。

実行結果は以下のようになります。
3.jpg
1.jpg
2.jpg

25%、100%、200%選択時です。


posted by cw at 23:00| Comment(3) | TrackBack(0) | Tips | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
>読書感想文の正しい書き方未だに分からんわ うちの近所の書店もその二冊だけ帯付いてたわ
Posted by あさみゆま at 2013年07月07日 15:59
”[C# WPF]色選択コンボボックスを作る”を読みながら、VS2013でPGを作成して試してみましたが、文法エラーが発生しています。
具体的には、
<x:Array x:Key="ColorItems" Type="s:Color">
の Type="s:Color" のところに ”the namespace prefix "s" is not defined.”

何が原因でしょうか?
ご教授頂けますでしょうか?
Posted by 徐 林山 at 2014年07月28日 23:01
WPFの勉強を始めていて本HPに行きあたりました。

XAMLのWindowsタグの所に以下を追加したら動作するようになりました。

xmlns:s="clr-namespace:System.Windows.Media;assembly=PresentationCore"

2か月以上経ってしまっていますが一応参考までに。。
Posted by 十三龍門 at 2014年09月03日 18:27
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。