WP8第二章:新手友好 UI控件详解与继承图

需积分: 10 1 下载量 3 浏览量 更新于2024-07-24 1 收藏 2.41MB PDF 举报
本资源是一份针对WP8开发者的详细教程,特别是针对UI设计部分的深入讲解。WP8第二章主要聚焦于用户界面(UI)控件的介绍和使用,对初学者极其有帮助。章节内容包括了基础控件、ToolKit控件以及事件管理的基础概念。 首先,章节从控件继承图开始,介绍了WP8中控件的层次结构,如`FrameworkElement`作为基类,向下派生出了多个重要的UI元素,如`Panel`,它又衍生出`Border`、`Control`等核心组件。`Image`、`TextBlock`、`Shape`等基础控件是构建UI界面的基本元素,如`Canvas`用于绘制图形,`StackPanel`和`Grid`则是常见的布局管理器,其中`Grid`特别强调了其网格布局的支持,可以自定义行列数,提供了灵活的布局控制。 接着,`Control`控件类别下涵盖了各类交互性强的按钮(如`Button`、`RepeatButton`等)、复选框和单选按钮,以及滑块、进度条等控件。`ListBox`和`Selector`则用于选择列表数据,而`Pivot`和`Panorama`则是导航和分页的解决方案。`ContentControl`允许动态内容的展示,适合于动态内容的显示和管理。 此外,还提到了`DependencyObject`,这是Windows Presentation Foundation (WPF)中的一个重要概念,所有UI元素都派生于`DependencyObject`,它们可以通过数据绑定和依赖属性实现复杂的交互。 在布局方面,重点讲解了`Grid`、`Canvas`和`StackPanel`三种布局方式,这些布局控件对于创建响应式的、适应不同屏幕尺寸的应用至关重要。通过理解并熟练运用这些布局技术,开发者能够构建出适应性强且用户体验良好的WP8应用程序界面。 事件部分虽然没有在提供的内容中直接列出,但可以推断这部分会涉及控件的用户交互,如点击、触摸事件的处理,以及如何通过事件驱动来响应用户的操作。 这份文档为WP8的UI开发提供了全面且循序渐进的指导,无论是初学者还是有一定经验的开发者,都能从中获益匪浅。通过学习和实践这些控件和布局,开发者将能更好地打造符合Windows Phone 8特性和用户需求的高质量应用。

帮我把下面一段C++代码改写成python代码:#include "Trade.h" #include "WPrice.h" #include <algorithm> double normalCDF(double x) // Phi(-∞, x) aka N(x) { return std::erfc(-x / std::sqrt(2)) / 2; //erfc()是互补误差函数,该返回值表示标准正态分布下var小于x的概率,即N(x) } CTrade::CTrade(double tick) : wp_bid(0.01), wp_ask(0.01), m_tick(tick), m_TimeRound(50) { newday(NULL); } CTrade::~CTrade() { } void CTrade::OnBook(const BTRec& btRec) { wp.setGamma(0.1); wp_bid = wp.getWP(&btRec.Bids); wp_ask = wp.getWP(&btRec.Asks); if (wp_mid > 0){ //wp_mid初始化为-1,仅遇到第一条BTRec记录时条件为false double wp_now = (wp_bid + wp_ask) / 2; //updated wp_mid int volume = btRec.volume; //volume between two orderbook records double ratio = normalCDF((wp_now - wp_mid) / (2 * m_tick)); //m_tick = tick = 0.2 double buyvolume = ratio*volume, sellvolume = (1 - ratio)*volume; m_TimeRound.update(buyvolume, sellvolume, btRec.rec_time.timestamp); //volume moving average if (mv_volume < 0) { mv_volume = volume; mv_buyvolume = buyvolume; } else{ mv_volume += 0.002*(volume - mv_volume); mv_buyvolume += 0.002*(buyvolume - mv_buyvolume); } // round trip volatility if (time_ini < 0 || btRec.rec_time.timestamp - time_ini >= time_scale){ if (time_ini>0){ double dp = wp_now - wp_ini; volatility += 0.05*(dp*dp - volatility); } time_scale = m_TimeRound.getTime() * 1000; //in milliseconds time_ini = btRec.rec_time.timestamp; wp_ini = wp_now; } } wp_mid = (wp_bid + wp_ask) / 2; } void CTrade::newday(const char* p) { wp_mid = -1; m_TimeRound.newday(p); volatility = 16 * m_tick*m_tick; time_slapse = -1, time_scale = -1, wp_ini = -1, time_ini = -1; mv_buyvolume = mv_volume = -1; }

2023-05-15 上传