WPF/E CTP Quick Start - 第十一部分:示例控件(翻译)

简介:
 下面的示例使用一个 TextBlock和一个 Line创建了一个超级链接。
<Canvas Width="300" Height="300"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<!-- Hyperlink -->
<Canvas Width="90" Height="30" Canvas.Left="20" Canvas.Top="20"
Background="transparent"
MouseEnter="javascript:hyperlink_MouseEnter"
MouseLeave="javascript:hyperlink_MouseLeave"
MouseLeftButtonDown="javascript:hyperlink_MouseLeftButtonDown">
<TextBlock Text="hyperlink" Foreground="Blue"/>
<Line Stroke="blue" StrokeThickness="1" X1="0" Y1="20" X2="65" Y2="20"
x:Name="hyperlink_line" Opacity="0"/>
</Canvas>
</Canvas>
function hyperlink_MouseLeftButtonDown(sender, args) {
window.location = "about-frames.html";
}

function hyperlink_MouseEnter(sender,args)
{
sender.findName("hyperlink_line").opacity = 1;
}

function hyperlink_MouseLeave(sender,args)
{
sender.findName("hyperlink_line").opacity = 0;
}
 
“按钮”示例
  下面的示例使用两个 Rectangle元素和一个 TextBlock创建了一个按钮。
<Canvas Width="300" Height="300"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Button -->
<Canvas
x:Name="button"
Canvas.Top="10" Canvas.Left="20"
MouseLeftButtonDown="javascript:button_MouseLeftButtonDown"
MouseLeftButtonUp="javascript:button_MouseLeftButtonUp"
MouseEnter="javascript:button_MouseEnter"
MouseLeave="javascript:button_MouseLeave">
<Canvas.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="button_transform" X="0" Y="0"/>
</TransformGroup>
</Canvas.RenderTransform>
<Rectangle Width="128.8" Height="56" x:Name="button_rectangle"
Stroke="#FF000000" Fill="sc#1, 0.8123474, 0.8123474, 0.8123474"/>
<Rectangle Stroke="sc#1, 0.912730157, 0.37122494, 0.17111966"
Width="126.8" Height="54" Canvas.Left="1" Canvas.Top="1"
Opacity="0" StrokeThickness="5" x:Name="button_highlight"/>
<TextBlock Text="Press me!" FontSize="20" Canvas.Left="22" Canvas.Top="12"/>
</Canvas>
</Canvas>
var mouseOver = false;
var pressed = false;

function button_MouseLeftButtonDown(sender,args) {
sender.captureMouse();
mouseOver = true;
pressed = true;
updateVisuals(sender);
}

function button_MouseLeftButtonUp(sender,args) {
sender.releaseMouseCapture();
pressed = false;

updateVisuals(sender);

if (mouseOver) {
alert("you pressed the button!");
}
}

function button_MouseEnter(sender,args) {
mouseOver = true;
updateVisuals(sender);
}

function button_MouseLeave(sender,args) {
mouseOver = false;
updateVisuals(sender);
}

function updateVisuals(sender) {
//background
if (pressed && mouseOver) {
sender.findName("button_rectangle").fill = "sc#1, 0.548430264, 0.5354195, 0.5354195";
var transform = sender.findName("button_transform");
transform.x = 2;
transform.y = 2;
} else {
sender.findName("button_rectangle").fill = "sc#1, 0.8123474, 0.8123474, 0.8123474";
var transform = sender.findName("button_transform");
transform.x = 0;
transform.y = 0;
}

// highlight
if (mouseOver || pressed) {
sender.findName("button_highlight").opacity = 1;
} else {
sender.findName("button_highlight").opacity = 0;
}
}
 
“滚动条”示例
  下面的示例使用了一个 LinePath创建了一个滚动条。
<Canvas Width="300" Height="300"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="javascript:slider_loaded">
<!-- Slider -->
<Canvas Canvas.Top="50" Canvas.Left="20" Width="200" Height="45"
Background="transparent" x:Name="slider"
MouseLeftButtonDown="javascript:slider_MouseLeftButtonDown">
<Line x:Name="slider_line" Stroke="black"
StrokeThickness="1" X1="0" Y1="25" X2="200" Y2="25"/>
<Path x:Name="slider_thumb" Stroke="#FF000000"
Fill="sc#1, 0.548430264, 0.5354195, 0.5354195"
Data="M0,0 L11.5,0 11.5,30 5.75,40 0,30z"
MouseLeftButtonUp="javascript:slider_thumb_MouseLeftButtonUp"
MouseMove="javascript:slider_thumb_MouseMove"
MouseLeftButtonDown="javascript:slider_thumb_MouseLeftButtonDown" />
</Canvas>
</Canvas>
var mouseDownPosition = 0;
var mouseDownValue = -1;

function slider_Loaded(sender, args) {
slider_SetValue(slider, 0);
}

function slider_MouseLeftButtonDown(sender, args) {
var coordinate = args.x;
coordinate -= sender["Canvas.Left"];
slider_SetValue(sender, coordinate);
}

function slider_thumb_MouseLeftButtonDown(sender, args) {
var slider = sender.findName("slider");
sender.captureMouse();
mouseDownValue = slider_GetValue(slider);
mouseDownPosition = args.x;
}

function slider_thumb_MouseLeftButtonUp(sender, args) {
var slider = sender.findName("slider");
sender.releaseMouseCapture();
mouseDownValue = -1;
}

function slider_thumb_MouseMove(sender, args) {
var slider = sender.findName("slider");
if (mouseDownValue != -1) {
var newValue = mouseDownValue
+ (args.x - mouseDownPosition);

slider_SetValue(slider, newValue);
}
}

function slider_GetValue(sender) {
var thumb = sender.findName("slider_thumb");
return thumb["Canvas.Left"] + .5 * thumb.width;
}

function slider_SetValue(sender, newValue) {
if (newValue > sender.width) {
newValue = sender.width;
}
if (newValue < 0) {
newValue = 0;
}
var thumb = sender.findName("slider_thumb");
thumb["Canvas.Left"] = newValue - .5 * thumb.width;
}
 


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60376,如需转载请自行联系原作者
相关文章
|
7月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
392 0
|
7月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
144 1
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
609 0
|
4月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
4月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
100 1
|
4月前
|
C# Windows
WPF中如何使用HandyCotrol控件库
WPF中如何使用HandyCotrol控件库
198 1
|
4月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
276 0
|
4月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
127 0
|
4月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
70 0
|
4月前
|
开发框架 前端开发 JavaScript
WPF应用开发之控件动态内容展示
WPF应用开发之控件动态内容展示