老赵点滴


  先做人,再做技术人员,最后做程序员。
  我的理想:“让外国人看中国人写的技术书籍和文章”。Try as I might
posts - 290, comments - 10752, trackbacks - 146, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

  一些属性能够被应用在所有的WPF/E的UIElement对象上:Canvas,shapes和TextBlock。这篇文档描述了这些对象所具有的公有图形属性。

  这篇文档包含了以下部分:

 

Opacity属性

  Opacity属性能够让您控制一个UIElement对象的alpha值或者透明的程度。您可以为Opacity设置一个0到1之间的数,该值越接近0.0,该对象就越接近完全透明,当Opacity属性为0时,对象就完全不可见了。默认的Opactiy属性的值为1.0,意味着对象完全不透明。下面的例子创建了两个不同透明程度的形状。

<Canvas Width="300" Height="300"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   
    <Rectangle Opacity="1.0" Height="100" Width="100" Canvas.Left="30" Canvas.Top="30"
        Stroke="Black" StrokeThickness="10" Fill="SlateBlue"/>
    <Rectangle Opacity="0.6" Height="100" Width="100" Canvas.Left="70" Canvas.Top="70"
        Stroke="Black" StrokeThickness="10" Fill="SlateBlue" />
</Canvas>

重新开始查看内容

 

OpacityMask属性

  OpacityMask属性能够让您控制一个UIElement不同部分的alpha值。例如,您可以使用OpacityMask使一个元素从右往左淡入或淡出。OpacityMask属性具有一个Brush对象,这个画刷将元素和画刷的每一个像素的alpha通道进行映射,以确定元素上对应像素的透明结果。如果画刷的某一部分是透明的,那么元素的那一部分会变得透明。

  您可以为OpacityMask使用不同类型的画刷,不过LinearGradientBrushRadialGradientBrushImageBrush最为常用。

  下面的示例将一个应用了LinearGradientBrush的opacity mask作用在一个Rectangle对象上。

<Canvas Width="300" Height="300"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   
    <Rectangle Height="100" Width="100" Canvas.Left="30" Canvas.Top="30"
        Stroke="Black" StrokeThickness="10" Fill="SlateBlue">
        <Rectangle.OpacityMask>
            <LinearGradientBrush>
                <GradientStop Offset="0.25" Color="#00000000"/>
                <GradientStop Offset="1" Color="#FF000000"/>       
            </LinearGradientBrush>
        </Rectangle.OpacityMask>
    </Rectangle>
</Canvas>

重新开始查看内容

 

Clip属性

  Clip属性能够使您有选择则绘制元素的一部分。使用Clip属性时,您需要提供一个Geometry对象用于描述绘制区域,任何超过绘制区域的部分都会被隐藏,或者说是“被修剪(clipped)”了。

  下面的示例使用了一个RectangleGeometry作为Ellipse元素的Clip属性。其结果是:只有EllipseRectangleGeometry定义的区域内的部分才被显示出来,超出RectangleGeometry的部分则被切除了。

<Canvas Width="300" Height="300"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   
    <Ellipse Height="200" Width="200" Canvas.Left="30" Canvas.Top="30"
        Stroke="Black" StrokeThickness="10" Fill="SlateBlue">
        <Ellipse.Clip>
            <RectangleGeometry Rect="0, 0, 100, 100"/>
        </Ellipse.Clip>
    </Ellipse>
</Canvas>

重新开始查看内容

 

RenderTransform属性

  RenderTransform属性让您可以使用Transform对象对一个元素进行旋转,倾斜,缩放或移动。下面的列表描述了您可以使用在RenderTransform属性上的不同的Transform对象

  • RotateTransform:将一个对象旋转特定的角度。
  • SkewTransform:将一个对象相对于X轴或Y轴进行倾斜
  • ScaleTransform:将一个对象在水平或垂直方向进行放大或缩小。
  • TranslateTransform:将一个对象在水平或垂直方向进行移动。 

  还有另外一种变换,TransformGroup,您可以使用它将多种变换应用在单个对象上。

  下面的示例将Transform对象应用在Rectangle元素上,展示了每个Transform对象的不同效果。

<Canvas Width="300" Height="300"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Rectangle Height="100" Width="100" Canvas.Left="70" Canvas.Top="10"
        Fill="Black">
        <Rectangle.RenderTransform>
            <RotateTransform Angle="45"/>
        </Rectangle.RenderTransform>
    </Rectangle>
    
    <Rectangle Height="100" Width="100" Canvas.Left="130" Canvas.Top="10"
        Fill="red">
        <Rectangle.RenderTransform>
            <SkewTransform AngleX="30"/>
        </Rectangle.RenderTransform>
    </Rectangle>
    
    <Rectangle Height="100" Width="100" Canvas.Left="10" Canvas.Top="190"
        Fill="blue">
        <Rectangle.RenderTransform>
            <ScaleTransform ScaleX="1.3" ScaleY=".5"/>
        </Rectangle.RenderTransform>
    </Rectangle>
    
    <Rectangle Height="100" Width="100" Canvas.Left="160" Canvas.Top="130"
        Fill="Green">
        <Rectangle.RenderTransform>
            <TransformGroup>
                <RotateTransform Angle="45"/>
                <ScaleTransform ScaleX=".5" ScaleY="1.2"/>
                <SkewTransform AngleX="30"/>
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>
    
</Canvas>

重新开始查看内容

 

下面该做什么呢?

  在下一部分“图像”中,您会了解Image元素的使用方式,以及您应该如何显示位图。

Feedback

#1楼    回复  引用  查看    

2006-12-10 15:05 by Dflying Chen      
辛苦了!
是“公有”还是“共有”呢?
从你的第一句“一些属性能够被应用在所有的WPF/E的UIElement对象上”来看,应该是“共有”吧,“共同拥有XXX东西”,“公有”是“公开我有XXX东西”的意思。

#2楼 [楼主]   回复  引用  查看    

2006-12-10 15:17 by Jeffrey Zhao      
@Dflying Chen
我在这两个词之中权衡了一会儿,我想“共有”的意思表示“共同拥有”,而“公有”的应该也不是“公开我有XXX的东西”的意思吧,我是想表示这些“属性”是“公共”的意思……

#3楼    回复  引用  查看    

2006-12-10 15:33 by sunlife      
HI,你写的很好,我很喜欢你的文章,很有条理,我想问一下,xmal文件中的代码,也就是你上面写的那些声明式代码都是自己手写的吗?有没有专门的工具来开发,就是说有提示功能.这样我们写起来方便,也不用去记这些属性,有吗?

#4楼 [楼主]   回复  引用  查看    

2006-12-10 15:38 by Jeffrey Zhao      
@sunlife
在VS里只要设对了Namespace就会有提示,因为安装SDK时Schema已经被复制到特定文件夹下了。:)

#5楼    回复  引用  查看    

2006-12-10 15:39 by Dflying Chen      
@Jeffrey Zhao
原文是public还是shared还是common呢?
你说“我是想表示这些“属性”是“公共”的意思”,这个“公共”是公开给外部使用者的么?如果是,那么“公有”没什么问题。如果这个“公共”是“所有组件都有这些属性”的意思,我觉得还是“共有”比较好一些。

#6楼    回复  引用  查看    

2006-12-10 16:30 by sunlife[匿名]      
我不太明白,请问是在哪边设Namespace,是在xmal文件中?能举个例子吗?
谢谢!

#7楼 [楼主]   回复  引用  查看    

2006-12-10 16:47 by Jeffrey Zhao      
@Dflying Chen
原文是common。

#8楼 [楼主]   回复  引用  查看    

2006-12-10 16:48 by Jeffrey Zhao      
@sunlife[匿名]
您试试看,创建一个XAML文件,然后输入:
<Canvas
  xmlns="http://schemas.microsoft.com/client/2007"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Canvas>
现在有代码提示了吗?

#9楼    回复  引用  查看    

2006-12-10 17:01 by Sheva      
我个人认为OpacityMask应该翻译成:通过用OpacityMask属性指定的画刷的alpha通道值来遮掩此元素的alpha通道值。因为OpacityMask其实就是用两个alpha通道值来进行&运算。

Sheva

#10楼    回复  引用  查看    

2006-12-10 17:05 by sunlife[匿名]      
我试了一下,不会提示,会不会和操作系统有关,我下载的自带的那些例子,我在里面修改,也不会有提示?这有可能是什么问题,还是我安装SDK有问题?

#11楼    回复  引用  查看    

2006-12-10 17:11 by sunlife[匿名]      
好的,我又看了一下,实际上我的sdk没有安装上,在安装过程中提示:your system has not been modified ,to install this program at later time,请问在这安装wpfesdk.msi之前,还要安装其它的吗?

#12楼    回复  引用    

2006-12-10 17:59 by wb [未注册用户]
好文,收藏!

#13楼 [楼主]   回复  引用  查看    

2006-12-10 19:05 by Jeffrey Zhao      
@Sheva
这是Mask一贯的工作原理,不过似乎原文没有很“专业”地去描述它,我再推敲一下。:)

#14楼 [楼主]   回复  引用  查看    

2006-12-10 19:06 by Jeffrey Zhao      
@sunlife[匿名]
其实安装完SDK就有了,是两个schema文件在起作用,我帮您找一下这两个文件。:)

#15楼 [楼主]   回复  引用  查看    

2006-12-10 19:07 by Jeffrey Zhao      
@sunlife[匿名]
我最近刚重装了系统,所以应该不需要特殊的东西阿……

#16楼 [楼主]   回复  引用  查看    

2006-12-10 19:07 by Jeffrey Zhao      
@wb
多些支持。:)

#17楼 [楼主]   回复  引用  查看    

2006-12-10 19:28 by Jeffrey Zhao      
@sunlife[匿名]
您把“C:\Program Files\Microsoft SDKs\WPFE\Help\XSD”里的wpfe.xsd文件复制到“C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas”就可以了。下面的文章里有更多的信息。:)
Here

#18楼    回复  引用  查看    

2006-12-10 21:01 by sunlife[匿名]      
好的,谢谢你,我现在用你的方法,可以了

#19楼 [楼主]   回复  引用  查看    

2006-12-10 22:02 by Jeffrey Zhao      
@sunlife[匿名]
:)

#20楼    回复  引用  查看    

2006-12-11 03:57 by 航天奇侠      

在ff 2.0中浏览本文有问题。图片掩盖了正文。
博主察看一下。

#21楼 [楼主]   回复  引用  查看    

2006-12-11 11:38 by Jeffrey Zhao      
@航天奇侠
多谢提醒。:)

#22楼    回复  引用  查看    

2007-01-08 09:56 by 星宿.NET      
Clip属性那里的
被修建(clipped)应该是被修剪(clipped)吧?

#23楼 [楼主]   回复  引用  查看    

2007-01-08 20:08 by Jeffrey Zhao      
@星宿.NET
不好意思,我改过来了。:)

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-08 20:16 编辑过


相关链接: