<Grid Width="950" Height="1025" HorizontalAlignment="Left" VerticalAlignment="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="150"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid Width="140" Height="300" Margin="5,10,5,5"> <Grid.ColumnDefinitions> <ColumnDefinition Width="60"/> <ColumnDefinition Width="70"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="0" Margin="5,5,10,5">M11</TextBlock> <Slider Name="tbM11" Grid.Column="1" Grid.Row="0" Minimum="-10" Maximum="10" Value="1" ValueChanged="tbM12_ValueChanged" ></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="1" Margin="5,5,10,5">M12</TextBlock> <Slider Name="tbM12" Grid.Column="1" Minimum="-10" Maximum="10" Value="0" Grid.Row="1" ValueChanged="tbM12_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="2" Margin="5,5,10,5">M21</TextBlock> <Slider Name="tbM21" Grid.Column="1" Minimum="-10" Maximum="10" Value="0" Grid.Row="2" ValueChanged="tbM12_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="3" Margin="5,5,10,5">M22</TextBlock> <Slider Name="tbM22" Grid.Column="1" Minimum="-10" Maximum="10" Value="1" Grid.Row="3" ValueChanged="tbM12_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="4" Margin="5,5,10,5">OffsetX</TextBlock> <Slider Name="tbOffsetX" Grid.Column="1" Minimum="-1000" Maximum="1000" Value="0" Grid.Row="4" ValueChanged="tbM12_ValueChanged"></Slider> <TextBlock HorizontalAlignment="Right" Grid.Column="0" Grid.Row="5" Margin="5,5,10,5"> OffsetY</TextBlock> <Slider Name="tbOffsetY" Grid.Column="1" Minimum="-1000" Maximum="1000" Grid.Row="5" Value="0" ValueChanged="tbM12_ValueChanged" ></Slider> <Button Click="BtnApply_Click" Margin="15,20,15,5" Grid.Row="6" Height="25" Grid.ColumnSpan="2" Grid.Column="0">Apply</Button> <Button Click="BtnClose_Click" Margin="15,0,15,5" Grid.Row="7" Height="25" Grid.ColumnSpan="2" Grid.Column="0">init</Button> </Grid> <Border Margin="10" Grid.Column="1" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Background="PowderBlue"> <Canvas Name="canvas1" Grid.Column="1" ClipToBounds="True" Width="770" Height="980"> <TextBlock Canvas.Top="53" Canvas.Left="90"> Original shape</TextBlock> <Rectangle Canvas.Top="70" Canvas.Left="100" Width="50" Height="70" Stroke="Black" StrokeThickness="2" StrokeDashArray="3,1"/> <Rectangle Name="rect" Canvas.Top="70" Canvas.Left="100" Width="50" Height="70" Fill="LightCoral" Opacity="0.5" Stroke="Black" StrokeThickness="2"> <Rectangle.RenderTransform> <MatrixTransform x:Name="matrixTransform"/> </Rectangle.RenderTransform> </Rectangle> </Canvas> </Border> </Grid>
private void BtnApply_Click(object sender, RoutedEventArgs e) { GetValue(); } private void GetValue() { if (matrixTransform != null) { Matrix m = new Matrix(); m.M11 = tbM11 != null ? tbM11.Value : 0; m.M12 = tbM12 != null ? tbM12.Value : 0; m.M21 = tbM21 != null ? tbM21.Value : 0; m.M22 = tbM22 != null ? tbM22.Value : 0; m.OffsetX = tbOffsetX != null ? tbOffsetX.Value : 0; m.OffsetY = tbOffsetY != null ? tbOffsetY.Value : 0; matrixTransform.Matrix = m; } } private void BtnClose_Click(object sender, RoutedEventArgs e) { Matrix m = new Matrix(); m.M11 = 1; m.M12 = 0; m.M21 = 0; m.M22 = 1; m.OffsetX = 0; m.OffsetY = 0; matrixTransform.Matrix = m; } private void tbM12_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { GetValue(); }
reference : Practical WPF Graphics Programming
'.NET > WPF 2D' 카테고리의 다른 글
WPF 2D SkewTransform (0) | 2013.07.04 |
---|---|
WPF 2D RotateTransform (0) | 2013.07.04 |
WPF 2D TranslateTransform (0) | 2013.07.03 |
WPF 2D Scale Transforms (0) | 2013.06.28 |
WPF 2D Creating Perpendicular Lines (0) | 2013.06.27 |
WPF 2D Transformations Matrix Transforms (0) | 2013.06.27 |
WPF Basic 2D Graphics Shapes (0) | 2013.06.19 |
WPF 2D 차트에 대한 사용자 정의 좌표 (0) | 2013.06.18 |