Win8 Canvas 绘图时 坐标系翻转

38 篇文章 1 订阅

当使用WPF创建图形时,应该清楚的知道图形显示在什么地方,要明白这一点,就需要我们对WPF中的坐标系统有一定的认识。下面就讨论一下WPF中的坐标系统以及它们的关系。

                    

  当使用WPF创建图形时,应该清楚的知道图形显示在什么地方,要明白这一点,就需要我们对WPF中的坐标系统有一定的认识。下面就讨论一下WPF中的坐标系统以及它们的关系。

   默认坐标系统

  在WPF 2维坐标中规定,左上角是坐标原点,向右为X轴的正方向,向下为Y轴的正方向,如图:

image

  在WPF中,可以用布局控件来描述绘制区域,如Canvas、DockPanel、Grid等,下面,看一个例子:

     
     
<Window x:Class="Chapter02.LineInDefaultSystem"          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         Title="Line in Default System" Height="300" Width="300">     <Canvas Height="300" Width="300">         <Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="2" />     </Canvas> </Window>
  运行结果:

image

  也可以使用其它单位,WPF支持四种不同的单位:px、in、cm、pt ,如:
    
    
 <Canvas Height="300" Width="300">         <Line X1="0.5in" Y1="2.0cm" X2="150" Y2="80pt" Stroke="Blue" StrokeThickness="0.1cm" />  </Canvas>
  用户自定义坐标系统

  WPF除了默认的坐标系统外,也支持用户自定义坐标系统。比如,在很多场景中,是以左下角为坐标原点,Y轴方向指向上方。

image

 

  这个时候,我们可以通过WPF强大的变换把坐标系统变成这个样子,如:

<Window x:Class="Chapter02.LineInCustomSystem"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
        Title="Line In Custom System" Height="240" Width="220"> 
    <Border BorderBrush="Black" BorderThickness="1" Height="200" Width="200"> 
        <Canvas Height="200" Width="200"> 
            <Canvas.RenderTransform> 
                <TransformGroup> 
                    <ScaleTransform ScaleY="-1" /> 
                    <TranslateTransform Y="200" /> 
                </TransformGroup> 
            </Canvas.RenderTransform>  
            <Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="2" /> 
        </Canvas> 
    </Border> 
</Window>

image

  当然,这时也还有一个问题,如在Canvas中添加一个按钮和文本:

 <Button Canvas.Top="50" Canvas.Left="80" FontSize="15" Foreground="Red" Name="label1" Content="My Button" />  <TextBlock Canvas.Top="120" Canvas.Left="20" FontSize="12pt" Foreground="Blue">      <Bold>My Text Block</Bold>  </TextBlock>
image

  会发现,文本和按钮也是经过翻转,要解决这个问题,可以再次翻转:
      
      
            <Button Canvas.Top="50" Canvas.Left="80" FontSize="15" Foreground="Red" Content="My Button">                 <Button.RenderTransform>                     <ScaleTransform ScaleY="-1" />                 </Button.RenderTransform>             </Button>                          <TextBlock Canvas.Top="120" Canvas.Left="20" FontSize="12pt" Foreground="Blue">                 <Bold>My Text Block</Bold>                 <TextBlock.RenderTransform>                     <ScaleTransform ScaleY="-1" />                 </TextBlock.RenderTransform>             </TextBlock>
image
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值