
SL 4的鼠标右键事件功能:
鼠标右键事件我个人觉得比较使用的功能是更换页面皮肤,或者是d出子窗口来添加临时需要填写的数据,或者是选择工具,或者是转到不同的连接等等。看项目需要你可以稍微想想,这个功能可以就是一个亮点。
在Silverlight 4中有个MouseRightbuttonDown和MouseRightbuttonUp事件,你可以给把它们合起来使用完成很多功能。当然,有leftbutton也有同样也添加了Up和Down事件。
我在Silverlight官网看了段视频介绍这个功能,它主要是介绍了右键修改皮肤,和ChilDWindowd出。我这里会边写边想着个大家多举几个例子。
1. 创建一个Silverlight4的应用程序。
2. 然后是在页面随便加点东西,我加了一个Rectangle,如下图
Ok,先测试下右键鼠标Down事件,
frame.MouseRightbuttonDown+=new MousebuttonEventHandler(frame_MouseRightbuttonDown);
委托的方法是MouseRightbuttonDown,它的代码这里就写个MessageBoxd出,
voID frame_MouseRightbuttonDown(object sender,MousebuttonEventArgs e)
{
MessageBox.Show("button right clicked on the frame");
}
运行一下,:
3. 更换这个Rectangle的颜色,也就是皮肤吧:
使用Popup控件来作为右键时皮肤项的容器。Popup中添加一个GrID。最后出来的结构如下:
@H_198_301@
ListVIEw中存放的是菜单,每个颜色都会添加一个右键的down事件,当事件发生时修改皮肤颜色。GrID也没什么特殊作用就是个容器,ListVIEw相同。比较特殊的是Canvas这个控件,它添加了两个事件:鼠标右键Down和鼠标左键Down,任何一个发生时,它都会去查看当的Popup是否打开,如果是打开就给关闭。
代码如下:
_popup = new Popup();
_grID = new GrID();
_popup.Child = _grID;
_canvas = new Canvas();
_canvas.MouseleftbuttonDown += (sender,args) => { OnClickOutsIDe(); };
_canvas.MouseRightbuttonDown += (sender,args) => { args.Handled = true; OnClickOutsIDe(); };
_canvas.Background = new SolIDcolorBrush(colors.transparent);
_grID.Children.Add(_canvas);
_content = GetContent();
_content.HorizontalAlignment = HorizontalAlignment.left;
_content.VerticalAlignment = VerticalAlignment.top;
_content.margin = new Thickness(_location.X,_location.Y,0);
_grID.Children.Add(_content);
UpdateSize();
这里你发现没有ListBox,而只能看到一个_content,它是个自定义的控件:
GrID grID = new GrID() { WIDth = 100,Height = 115 };
border border = new border() { borderBrush = new SolIDcolorBrush(colors.Black),borderThickness = new Thickness(1),Background = new SolIDcolorBrush(colors.lightGray) };
grID.Children.Add(border);
TextBlock red = new TextBlock() { Text = "Red",WIDth = 90 };
red.MouseleftbuttonUp += new MousebuttonEventHandler(ChangecolorRed);
TextBlock blue = new TextBlock() { Text = "Blue",WIDth = 90 };
blue.MouseleftbuttonUp += new MousebuttonEventHandler(ChangecolorBlue);
TextBlock green = new TextBlock() { Text = "Green",WIDth = 90 };
green.MouseleftbuttonUp += new MousebuttonEventHandler(ChangecolorGreen);
TextBlock yellow = new TextBlock() { Text = "Yellow",WIDth = 90 };
yellow.MouseleftbuttonUp += new MousebuttonEventHandler(ChangecolorYellow);
TextBlock cancel = new TextBlock() { Text = "Cancel Menu",WIDth = 90 };
cancel.MouseleftbuttonUp += new MousebuttonEventHandler(CancelContextMenu);
ListBox options = new ListBox();
options.Items.Add(red);
options.Items.Add(blue);
options.Items.Add(green);
options.Items.Add(yellow);
options.Items.Add(cancel);
grID.Children.Add(options);
就是在它里面添加了ListBox 。
最后就是在页面加载时给需要改变颜色的控件添加右键事件:
frame.MouseRightbuttonDown+=new MousebuttonEventHandler(frame_MouseRightbuttonDown);
frame.MouseRightbuttonUp+= new MousebuttonEventHandler(frame_MouseRightbuttonUp);
voID frame_MouseRightbuttonDown(object sender,MousebuttonEventArgs e)
{
e.Handled = true;
}
voID frame_MouseRightbuttonUp(object sender,MousebuttonEventArgs e)
{
SkinChangeContextMenu contextMenu = new SkinChangeContextMenu(frame);
contextMenu.Show(e.Getposition(LayoutRoot));
}
运行结果:
4. 使用MouseRightDown事件来改变一个Canvas的大小;
还是以上面的Canvas为例子,鼠标右键是我们需要让一个Popup显示出来,通过Popup上的两个SlIDer来设置Canvas的Height和WIDth。
Xaml代码:
<GrID x:@R_502_6889@="LayoutRoot" Background="White">
<TextBlock Text="Right-click to customize" FontWeight="Bold" margin="12,0"/>
<Rectangle Height="254" HorizontalAlignment="left" margin="12,24,0" @R_502_6889@="frame"
stroke="Black" strokeThickness="4" VerticalAlignment="top" WIDth="320" RadiusX="15" RadiusY="15" Fill="Red"
MouseRightbuttonDown="frame_MouseRightbuttonDown"
MouseRightbuttonUp="frame_MouseRightbuttonUp" />
<Popup x:@R_502_6889@="pop">
<border Background="lightBlue" margin="10" borderBrush="Blue" CornerRadius="5" borderThickness="3">
<GrID WIDth="235" Height="138">
<TextBlock Text="Customize:" FontWeight="Bold" HorizontalAlignment="Center" margin="83,83,116" />
<TextBlock Height="23" HorizontalAlignment="left" margin="19,30,0" @R_502_6889@="textBlock1" Text="WIDth:" VerticalAlignment="top" WIDth="60" />
<SlIDer Height="23" @R_502_6889@="slWIDth" margin="114,31,84" Value="320" Minimum="10" Maximum="320" ValueChanged="slWIDth_ValueChanged" />
<TextBlock Height="23" HorizontalAlignment="left" margin="19,72,0" @R_502_6889@="Height" Text="Height:" VerticalAlignment="top" WIDth="60" />
<SlIDer Height="23" margin="114,43" @R_502_6889@="slheight" Minimum="10" Value="254" Maximum="254" ValueChanged="slheight_ValueChanged" />
<button Content="Done" Height="23" HorizontalAlignment="left" margin="129,109,0" @R_502_6889@="btnDone" Click="btnDone_Click" VerticalAlignment="top" WIDth="75" />
</GrID>
</border>
</Popup>
当在Canvas右键点击时,我们让这个Popupd出来:
private voID frame_MouseRightbuttonDown(object sender,MousebuttonEventArgs e)
{
e.Handled = true;
}
private voID frame_MouseRightbuttonUp(object sender,MousebuttonEventArgs e)
{
pop.HorizontalOffset = e.Getposition(null).X + 2;
pop.VerticalOffset = e.Getposition(null).Y + 2;
pop.IsOpen = true;
}
Popup伤的SlIDer添加的事件代码:
private voID slheight_ValueChanged(object sender,RoutedPropertyChangedEventArgs<double> e)
{
if (frame == null) return;
frame.Height = slheight.Value;
}
private voID slWIDth_ValueChanged(object sender,RoutedPropertyChangedEventArgs<double> e)
{
if (frame == null) return;
frame.WIDth = slWIDth.Value;
}
private voID btnDone_Click(object sender,RoutedEventArgs e)
{
pop.IsOpen = false;
}
现在运行下,看看结果:
拖动滚动条就可以让后面红色的那个Rectangle高度或者宽度变化。
5. 刚才试着给那个popup添加哥drag –drop功能,没成功。
总结以上是内存溢出为你收集整理的Silverlight 4中更换页面皮肤的功能全部内容,希望文章能够帮你解决Silverlight 4中更换页面皮肤的功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)