silverlight+控件布局

ascap 2010-05-17 04:23:28
LayoutRoot是Grid,我在上面放了几个button,当程序全屏时一些button就可不到了。请问
怎么定位这些控件,使其相对位置不会发生变化。

谢谢先!
...全文
159 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻想多巴胺 2010-06-11
  • 打赏
  • 举报
回复
kntao 2010-05-27
  • 打赏
  • 举报
回复
我记得用sizechanged事件里重新定位。。。
ycproc 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liguo9868 的回复:]

使用 margin 属性实现。
[/Quote]
正解
坐沙发的 我 汗
superming_jann 2010-05-20
  • 打赏
  • 举报
回复
silverlight 中的margin好强大!
布局在自动适应宽、高度方面 感觉比传统的好很多
websco 2010-05-18
  • 打赏
  • 举报
回复
不晓得楼主明白我的意思没,我的意思是
1. 楼主在切换 FullScreen 时自己用代码改变了布局;
2. 楼主对Silverlight的布局(使用Grid时)似乎还不是很了解,关于水平对齐的Left和垂直对齐的Top方式需要学习一下;
3. 楼主对于在Grid的列宽、行高使用*(Star)似乎也是比较模糊,使用*时在Grid的大小发生改变时是会影响到里面的控件的布局的。

另外,我运行楼主的代码,在16:9宽屏的分辨率下,并没有出现有哪个按钮在全屏下看不到了的情况,不知楼主指的是什么情况?
jv9 2010-05-18
  • 打赏
  • 举报
回复
在全屏模式下,可以使用相对值进行位置设置,

<Button x:Name="btnPosition" Margin="44,11,6,22" Content="Position" Grid.Row="1" d:LayoutOverrides="Height"/>


你的代码中Margin属性定义控件的位置容易错位或者被覆盖。在代码中,你对布局又一次进行修改,这样会造成布局异常出现。

推荐楼主参考这个系列文章,对布局进行修改:http://www.silverlightchina.net/html/zhuantixilie/getstart/2010/0409/978.html
ascap 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 websco 的回复:]
楼主的代码乱写一通...

把代码改成下面这样,自己看看是在做些什么

C# code

if (Application.Current.Host.Content.IsFullScreen)
{

btnPosition.Opacity = 1;
btnPosition.Width = Application.Current.Host.Content.Actua……
[/Quote]

谢谢,那怎么保证按钮以前的位置随着全屏变化而相对位置不变呢?
ascap 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 websco 的回复:]
不晓得楼主明白我的意思没,我的意思是
1. 楼主在切换 FullScreen 时自己用代码改变了布局;
2. 楼主对Silverlight的布局(使用Grid时)似乎还不是很了解,关于水平对齐的Left和垂直对齐的Top方式需要学习一下;
3. 楼主对于在Grid的列宽、行高使用*(Star)似乎也是比较模糊,使用*时在Grid的大小发生改变时是会影响到里面的控件的布局的。

另外,我运……
[/Quote]

谢谢,我的程序整个还是比较复杂的,我只是摘录出来了一点。我再仔细研究一下吧。
websco 2010-05-17
  • 打赏
  • 举报
回复
楼主的代码乱写一通...

把代码改成下面这样,自己看看是在做些什么

if (Application.Current.Host.Content.IsFullScreen)
{

btnPosition.Opacity = 1;
btnPosition.Width = Application.Current.Host.Content.ActualWidth;
btnPosition.Height = Application.Current.Host.Content.ActualHeight;
btnFullScreen.Content = string.Format("{0}\r\n{1}\r\n{2}\r\n{3}\r\n{4}", "Normal"
, Application.Current.Host.Content.ActualWidth,Application.Current.Host.Content.ActualHeight
, btnPosition.ActualWidth, btnPosition.ActualHeight);
}



ascap 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wapdos 的回复:]
把上面那个width和height删除 试试 或责调整GRID的width和height
[/Quote]

试过了,还是不行!
ascap 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liguo9868 的回复:]
使用 margin 属性实现。
[/Quote]
麻烦具体一下呀。
ascap 2010-05-17
  • 打赏
  • 举报
回复
贴上我的代码:
xaml文件

<UserControl x:Class="FullScreen.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot" Margin="0,0,139,119" Background="#FF2B44BE" Height="auto" Width="auto">
<Grid.RowDefinitions>
<RowDefinition Height="0.657*"/>
<RowDefinition Height="0.152*"/>
<RowDefinition Height="0.191*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="0.401*"/>
<ColumnDefinition Width="0.349*"/>
</Grid.ColumnDefinitions>
<Button x:Name="btnPosition" Margin="44,11,6,22" Content="Position" Grid.Row="1" d:LayoutOverrides="Height"/>
<Button x:Name="btnFullScreen" HorizontalAlignment="Left" Margin="5,9,0,24" Width="75" Content="FullScreen" Grid.Column="2" Grid.Row="1" d:LayoutOverrides="Height"/>

</Grid>
</UserControl>


cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace FullScreen
{
public partial class MainPage : UserControl
{
private double posWidth = 0;
private double posHeight = 0;

public MainPage()
{
InitializeComponent();
posWidth = btnPosition.Width;
posHeight = btnPosition.Height;

Application.Current.Host.Content.FullScreenChanged+=new EventHandler(Content_FullScreenChanged);
btnFullScreen.Click+=new RoutedEventHandler(btnFullScreen_Click);
}

void btnFullScreen_Click(object sender, RoutedEventArgs e)
{
//判断当前是否是全屏模式
if (Application.Current.Host.Content.IsFullScreen)
{
Application.Current.Host.Content.IsFullScreen = false;
}
else
{
Application.Current.Host.Content.IsFullScreen = true;
}

}

void Content_FullScreenChanged(object sender, EventArgs e)
{
//如果是全屏模式,则设置MediaElement对象的宽度和高度为全屏。
if (Application.Current.Host.Content.IsFullScreen)
{

btnPosition.Opacity = 0;
btnPosition.Width = Application.Current.Host.Content.ActualWidth;
btnPosition.Height = Application.Current.Host.Content.ActualHeight;
btnFullScreen.Content = "Normal";
}
else
{
//恢复MediaElement对象的宽度和高度
btnPosition.Opacity = 1;
btnPosition.Width = posWidth;
btnPosition.Height = posHeight;
btnFullScreen.Content = "FullScreen";
}

}
}
}
websco 2010-05-17
  • 打赏
  • 举报
回复
检查你的对齐方式,在Grid的大小发生变化时,对齐方式的不同会导致控件显示位置不同,不用全屏显示,改变IE窗口的大小应就能看得出效果。
wapdos 2010-05-17
  • 打赏
  • 举报
回复
把上面那个width和height删除 试试 或责调整GRID的width和height
liguo9868 2010-05-17
  • 打赏
  • 举报
回复
使用 margin 属性实现。
ascap 2010-05-17
  • 打赏
  • 举报
回复
不行啊,兄弟。请仔细想想,没那么简单。
cpt_adt2010 2010-05-17
  • 打赏
  • 举报
回复
把Grid分成行列,将button放入具体的某行某列中。就像html时的table.(呵呵,你的问题太简单了,我竟然会)
案例中的控件全部有源代码示范学习为主。 1.Calendar组件(日历组件) 2.ChildWindow组件(子窗体组件) 3.浮动窗体组件 4.GridSplitter组件 5.TabControl组件 6-7-8.TreeView组件 9.DtarGrid 10.强大的DataGrid组件[2]_数据交互之ADO.NET Entity Framework 11.强大的DataGrid组件[3]_数据交互之Linq to SQL——Silverlight学习笔记 12-13.强大的DataGrid组件[4]_实现CURD 14.强大的DataGrid组件[6]_调用存储过程服务端分页 15.强大的DataGrid组件[7]_自定义DataGrid 16.强大的DataGrid组件[8]_内嵌ComboBox动态数据联动 17.强大的DataGrid组件[9]_自定义头模板(HeaderTemplate) 18.强大的DataGrid组件[10]_自定义脚模板(FooterTemplate) 19.强大的DataGrid组件[11]_主从(Master-Details)的实现 20.强大的DataGrid组件[12]_分组(Group) 21.强大的DataGrid组件[13]_字段过滤(Filter) 22.强大的DataGrid组件[14][Final]_数据验证 23.有关DataForm组件的研究_基础知识和实现服务端批量CURD 24.有关DataForm组件的研究_显示多重数据模型集合 25.有关DataForm组件的研究_自定义DataForm模板 26.有关Data Input类组件的研究 27.有关Accordion组件的研究 摘要: Accordion组件在开发中常用于信息的分类显示,用于显示数据验证信息不错 28.TransitioningContentControl组件: TransitioningContentControl控件主要应用于变化内容的过渡呈现效果 29.有关Navigation的: 在Silverlight的程序设计中经常需要在多个XAML页面之间进行切换,以进行不同的功能操作 30.有关ImplicitStyleManager组件: ImplicitStyleManager组件的作用是封装一个附加的行为,该行为将一个框架元素内的相关资源词典内的样式传播至它的子元素。该组件同样提供了附加属性,使资源字典能从外部源加载。层次状样式同样被支持,这与WPF相类似 31.有关Theme(主题): 在Silverlight的开发中,为组件设置统一的主题会让程序的外观显得美观大方 32.有关Expander组件的研究 摘要: Expander组件常用做边栏目录的分类,比如Windows中“我的文档”的侧边栏。本文将为大家介绍该组件的基本特性以及实际应用 33.有关ViewBox组件 摘要: ViewBox的作用是拉伸或延展位于其中的组件,使之有更好的布局及视觉效 34.有关WrapPanel组件 摘要: WrapPanel组件作用是从左至右或从上至下依次安排位于其中的元素的位置,当元素超过该组件边缘时,它们将会被自动安排至下一行或列。该组件一般用于文本布局、拾色器、图片选择等。本文将为大家介绍该组件的基本特性以及应用实例 35.有关AutoCompleteBox组件 摘要: AutoCompleteBox(自动完成框)组件能加快我们的输入效率,同时也能够提高输入的联想效果 37.有关AutoCompleteBox组件的研究[2]_常用特性实例介绍 38.有关AutoCompleteBox组件的研究[3]_FilterMode和ItemFilter 摘要: 对于AutoCompleteBox组件而言,设置合理的过滤模式有利于对数据的精确筛选 39.有关AutoCompleteBox组件的研究[4]_下拉框内嵌DataGrid与被嵌入DataGrid 摘要: 在AutoCompleteBox组件下拉框中嵌入DataGrid可以让我们更好地组织候选数据以达到更好的显示效果。与此类似的,在DataGrid组件中嵌入AutoCompleteBox组件可以便于我们进行数据的输入。本文将为大家讲述如何实现这两种效果 40.有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion) 摘要: 在AutoCompleteBox组件中集成搜索引擎的功能是十分常见的,这有助于我们更好地与Web进行交互。本文将为大家讲述如何在在AutoCompleteBox组件中集成搜索引擎的搜索建议 41.有关Rating组件的研究 摘要: 我们经常能在网上发现为新闻、博客文章、图片或是电影视频的评分功能。在Silverlight中,使用Rating组件便能助我们完成以上的功能。本文将为大家介绍该组件的基础知识以及自定义应用方面等方面的内容 42.有关Input类组件的研究 摘要: Input输入类控件丰富了我们的输入形式,合理地运用之,可以加快我们录入的速度。本文将为大家介绍Input类组件中的其他4个组件ButtonSpinner、DomainUpDown、NumericUpDown以及TimePicker的基础知识及其简单运用 43.有关DataVisualization类组件的研究 摘要: Data Visualization类组件以直观的图表方式显示数据的分布,能够让我们更好地分析各数据的内在联系。本文主要向大家介绍该类组件的基本特性以及使用实例

8,731

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧