- ViewBox控件:以最快的方式生产略缩图。所有放置在其中的内容将会被扩展或缩小为ViewBox的尺寸。主要属性Stretch:Fill填充;Uniform按比例缩放(默认值);UniformToFill按比例填充,会发生截断。配合使用StretchDirection:UpOnly如果合适扩大内容,DownOnly如果合适缩小内容,Both默认值。这个控件可真有用,我可以将用户控件放置其中做成略缩图的效果。
- Window使用Open方法时为子窗口指定Owener,可以在关闭父窗口时关闭所有子窗口。
在Closing事件中,可以提醒用户保存数据,代码如下:
MessageBoxResult result=MessageBox.Show("关闭?","Prompt",MessageBoxButton.YesNo,MessageBoxImage.Question);
If(result=MessageBoxResult.No)
{e.Cancel=true;}
- Style 其实就是SPC里的配置类。将属性值独立出来设置,可以在控件间共享这些属性值。TargetType="{x:Type Button}"用来设置该样式应用于何种控件上,如果将Button改为Control,那么则可以应用到所有Control上,此时如果想用BaseOn进行继承,必须先将TargetType设置成跟父类一致。此时如果删除X:Key,那么该样式会应用到所有Button上。其实该样式资源还是有键值的,它的键值是{x:Type Button},跟TargetType的值一致。所以它还是可以作为基类被引用。
WPF控件一般具有Style和FocusVisualStyle? 属性。后者用于获取焦点时改变控件外观。ItemsControl有一个ItemContainerStyle属性,可以将Style应用到每一项上。
- WPF 控件有三种类型的模板,ControlTemplate(用于定义控件的Visual Tree)、ItemsPanelTemplate(可以用自定义的面板代替控件原有的布局面板,例如设置ListBox的ItemPanel为水平的StackPanel就可以定义一个横向的列表)、DataTemplate(定义数据绑定)。三者都派生自FrameWorkTemplate。
- Application.Property[object]=object 相当于BS中的Session。而独立存储相当于Cookie。
- TemplateBinding是一个只能用于Template中的轻量Binding。
<Ellipse Background={TemplateBinding Background}/>
可以将Ellipse的背景色设置成父控件的背景色。它等价于:
Background={Binding RelativeSource={RelativeSource TemplatedParent},Path=Background}
- Template中用ContentPersenter控件来表示内容,它有一个隐式的Content设置。
Content={TemplateBinding Content}
将ContentPersenter放置在一个ViewBox中可以获得很好的效果。但是将整个面板放置在ViewBox中,会让模板中的控件无法同步父控件的长宽设置。
- 将ScaleTransform的ScaleY设置为-1就能将控件翻转。用VisualBrush可以得到控件的快照。利用OpacityMask透明遮罩可以得到渐变的效果。
- Drawing类代表二维图像。
Visual是UIElement类的抽象基类。它包含了画任何东西到屏幕上的下层基本构造。是将Drawing画至屏幕的方式。
Shape是预制的Visual。
- 动画,主要应用在EventTrigger中。EventTrigger的RoutedEvent属性必须是一个带类名的路由事件名,比如:ViewBox.MouseEnter。要实现动画需在EventTrigger中放置BeginStoryBoard,再放置StoryBoard,再放置Animatin类。各数据类型都有各自的Animation类,比如DoubleAnimation。除了基本的TO、From、By属性外还有AutoReverse、RepeatBehavior、Duration等属性。并且可以使用StoryBoard.TargetProperty附加属性来控制某个Animation是影响控件的哪一个依赖属性。
动画可以设置关键帧DoubleAnimationUsingKeyFrames。关键帧可以有如下类型:LinearDoubleKeyFrame(线性)、SplineDoubleKeyFrame(样条关键帧,可以通过KeySpline(0,1 1,0)来设置曲线控制点)、DiscreteDoubleKeyFrame(离散)。
如果是附加属性必须加括号。比如(Canvas.Top)
- 将UserControl放置在ViewBox中可以很好的进行缩放。如果用属性触发器设置缩放的话会发生颤抖的情况,所以用事件触发器来设置缩放是最好的选择。但是必须在Style中给RenderTransform设置一个ScaleTransform示例,那么在触发器中就可以对RenderTransform.ScaleX应用DoubleAnimation。
- Grid按比例放放大缩小 Canvas绝对定位 设置了XY值
- RelativeSource的三种用法
1.指定为自身 {Binding RelativeSource={RelativeSource self}}
2.指定为模板使用者 {Binding RelativeSource={RelativeSource TemplatedParent}}
3.指定为上N层控件 {Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=n,AncestorType={x:Type Button}}}
这个可以用在Canvas中的控件移动的时候。
- 属性触发器和事件触发器很多时候可以通用。很多事件有对应的属性:IsMouseEnter对应MouseOver,Click对应IsPressed。今天做了一个例子,觉得属性触发器优于事件的,比如它可以自动恢复原来的状态。属性触发器也可以用EnterActions和ExitActions来实现动画效果。可以在ExitActions中放置RemoveStoryBoard来停止EnterActions中动画的播放。一个没有ExitActions的属性触发器相当于事件触发器,更优的是他可以通过设置最终属性值实现自动动画。属性触发器有一点不好就是容易发生状态转换,比如我缩放按钮,按钮一缩小,IsMouseOver马上就变成False了,按钮回复初始状态,但是IsMouseOver有变成True。这样的话就会发生颤抖的现象。所以此时用时间触发的动画是好的选择。
- 可以在EventTrigger中利用SoundPlayerAction播放生意。支持WAV。
posted on
2008-12-20 19:07
林骄
阅读(
504)
评论()
收藏
举报