如果你看过MSDN中Silverlight关于控件的词条
本文可以跳过了。如果你是“功利”派。可以浏览一下。
控件内容模型
1控件内容模型
1.1文本控件
控件 |
内容类型 |
内容属性 |
Text |
||
Text |
||
Text |
||
Text |
TextBlock 继承自 frameworkElement
里面的行是
Text 属性接受 String。Inlines 属性接受InlineCollection。
InlineCollection 接受 Inline 对象
TextTrimming 枚举
描述当文本溢出其包含框的边缘时如何修整文本。
RichTextBox
方案 |
建议控件 |
显示无格式纯文本。 |
|
显示格式化文本、段落、超链接或内联图像。 |
|
输入或编辑纯文本,例如在某一窗体中。 |
|
输入或编辑格式化文本、段落、超链接或内联图像。 |
|
编辑要求格式、段落、超链接或内联图像的文档、文章或博客。 |
|
应用字符或段落格式。 |
TabNavigation
KeyboardNavigationMode
|
Local |
只有 Tab 索引位于此容器内时,才会在本地子树上考虑这些索引。 |
|
Cycle |
当到达容器内的第一个或最后一个键盘导航位时, 焦点返回到第一个或最后一个键盘导航位。 |
|
Once |
容器及其所有子元素整个只能接收焦点一次。 |
TextBlock
控件是在基于 Silverlight 的应用程序中用于显示文本的主要元素。如果您需要显示包含必填字段或验证错误指示器的另一控件的标题,请使用 Label 控件。
1.2显示单个元素和标题的控件
Header 属性属于 Object 类型,因此与 Content 属性一样,
对标题可以包含的内容也没有限制。
1.3显示项集合的控件
ListBox、ComboBox、TreeView 和 TabControl 都是项控件.
ListBoxItem、ComboBoxItem、TreeViewItem 和 TabItem 是对应的项容器
可以通过
Items 和 ItemsSource 来确定内容
@1
ComboBox cb1 = new ComboBox();
cb1.Items.Add("Item 1");
cb1.Items.Add("Item 2");
cb1.Items.Add("Item 3");
LayoutRoot.Children.Add(cb1);
@2
ObservableCollection<Uri> Uris = new ObservableCollection<Uri>();
Uris.Add(new Uri("http://www.contoso.com"));
Uris.Add(new Uri("http://www.tailspintoys.com"));
Uris.Add(new Uri("http://www.cohowinery.com/"));
UriBox1.ItemsSource = Uris
@3
也可以通过将 ItemsSource 属性设置为 Binding 对象以及设置控件的 DataContext 来绑定到集合
ObservableCollection<Uri> Uris = new ObservableCollection<Uri>();
Uris.Add(new Uri("http://www.contoso.com"));
Uris.Add(new Uri("http://www.tailspintoys.com"));
Uris.Add(new Uri("http://www.cohowinery.com/"));
UriBox2.DataContext = Uris;
XAML中
<ComboBox ItemsSource="{Binding}" x:Name="UriBox2" />
AutoCompleteBox
是一个特殊控件,它组合一个用于放置用户输入的文本框和一个在下拉项中显示的项控件
DataGrid
这个比较泛滥。
显示一个项集合和一个标头的控件
HeaderedItemsControl
表示包含一个标题和项集合的控件
显示用户界面元素的控件
Panel、Grid、Canvas 和 StackPanel
2控件初始化和布局
1构造控件
2设置控件属性
3应用了 Style 属性(显式样式)。
4应用了 Style 属性(generic.xaml 中的默认样式)。
5Loaded 事件发生。
6应用了模板(根据模板创建控件的可视化元素)。
7调用了OnApplyTemplate方法。
8代码中控件可视化元素变得可供操纵。
9 调用了MeasureOverride方法。
10调用了ArrangeOverride方法。
11引发LayoutUpdated事件。
1 DataGrid
默认键盘行为
在内部表格内有对快捷键丰富的支持
你可以凭用word表格和平常用计算机的直觉
来操作。
比如:
Home |
将焦点移到当前行的第一个单元格。 |
End |
将焦点移到当前行的最后一个单元格。 |
F2 |
如果对于当前列 DataGrid.IsReadOnly 属性是 false,并且DataGridColumn.IsReadOnly 属性是 false,则使当前单元格进入单元格编辑模式。 |
Enter |
提交对当前单元格和行的所有更改,并将焦点移到在当前单元格正下方的单元格。如果焦点位于最后一行,则提交所有更改,而不移动焦点。 |
包括上下左右等等
http://msdn.microsoft.com/zh-cn/library/cc838112(v=VS.95).aspx
默认的鼠标的行为
鼠标操作 |
说明 |
单击某一未选择行 |
使单击的行成为当前行。 |
单击当前行中的某一单元格 |
将单击的单元格置于编辑模式下。 |
拖动某一列标头单元格 |
如果对于当前列 DataGrid.CanUserReorderColumns 属性是 true,并且DataGridColumn.CanUserReorder 属性是 true,则移动该列将其放入新的位置。 |
拖动某一列标头分隔符 |
如果对于当前列 DataGrid.CanUserResizeColumns 属性是 true,并且DataGridColumn.CanUserResize 属性是 true,则调整该列的大小。 |
单击某一列标头单元格 |
如果对于当前列 DataGrid.CanUserSortColumns 属性是 true,并且DataGridColumn.CanUserSort 属性是 true,则对该列排序。 单击已排序的某一列的标头将颠倒该列的排序方向。 单击多列标头的同时按 Shift 键将以单击的顺序按多列排序。 |
Ctrl+单击某一行 |
如果 SelectionMode 设置为 Extended,则修改非连续多行选择。 如果该行已被选择,则取消选择该行。 |
Shift+单击某一行 |
如果 SelectionMode 设置为 Extended,则修改连续多行选择。 |
单击行组标题展开器按钮 |
展开或折叠组。 |
双击行组标题 |
展开或折叠组。 |
为datagrid 绑定数据
<Grid.Resources>
<DataTemplate x:Key="CBTemplate">
<!----指定key 以调用--->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Width="50" Height="50"
Source="{Binding Photo}" Stretch="Fill"/>
<TextBlock Grid.Column="1" Text="{Binding Title}"
Margin="10" HorizontalAlignment="Left" FontSize="20"/>
</Grid>
</DataTemplate>
</Grid.Resources>
使用
<ComboBox x:Name="CB1" VerticalAlignment="Top" HorizontalAlignment="Left"
ItemTemplate="{StaticResource CBTemplate}" ItemsSource="{Binding}" />
C#代码中
LayoutRoot.DataContext = MyThings;
更改行详细信息部分的可见性
dataGrid1.RowDetailsVisibilityMode =
DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
|
成员名称 |
说明 |
|
Collapsed |
不针对任何行显示行详细信息部分。 |
|
Visible |
针对所有行显示行详细信息部分。 |
|
VisibleWhenSelected |
仅针对选定行显示行详细信息部分。 |
防止在水平方向滚动行详细信息部分
this.dataGrid1.AreRowDetailsFrozen = bool值
获取或设置一个值,该值指示行详细信息部分是在显示区域的宽度处保持固定,还是可以水平滚动。
如何:自定义 DataGrid 控件中自动生成的列
只需要自定义处理
AutoGeneratingColumn 事件 。通过引用DataGridAutoGeneratingColumnEventArgs
来改变包括行头。模板等等。
if (e.Column.Header.ToString() == "Name")
e.Column.Header = "Task";
if (e.PropertyName == "DueDate")
{
// Create a new template column.
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Due Date";
templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["dueDateCellEditingTemplate"];
templateColumn.SortMemberPath = "DueDate";
取消生成列
if (e.PropertyType == typeof(bool))
e.Cancel = true;
想要自定义输出还有另外一种简单的方式
就是在数据实体那里(model层)
对其属性写Display 指定其中文名 等等
你可以尝试创建一个WCF RIA service
在其 meata 文件中 更改 其显示名。
如果你之前了解 MVC 验证那些 。应该知道我说的
是什么了。
使用 PagedCollectionView 对数据进行分组、排序和筛选
对话框概述
1消息框
您可以选择使用 Show(String, String, MessageBoxButton)方法,为消息框指定一个标题和一个取消按钮。消息框是一种模式对话框,这意味着用户在响应消息框之前将无法继续。您可以使用从 Show 方法返回的 MessageBoxResult 对象,确定用户是单击了“确定”还是“取消”并作出相应的反应。
2通用对话框
针对常用对话框的安全限制
出于安全目的,如果 Silverlight 应用程序为沙盒应用程序,则文件和打印对话框必须是用户启动的对话框。这意味着,您必须从用户启动的操作(例如,按钮的单击事件处理程序)显示它们。如果您尝试从非用户启动的代码显示一个对话框,则将发生 SecurityException。当您将 Visual Studio 调试器用于某一对话框时,如果您在对话框创建和对话框显示之间设置一个断点,则将发生 SecurityException。由于用户启动的限制,这是预期的行为。如果您在调用 ShowDialog 后设置一个断点,则不引发异常。
“打开文件”对话框
“保存文件”对话框
SaveFileDialog sfd;
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
sfd = new SaveFileDialog();
sfd.Filter = "Video Files (.wmv) | *.wmv";
bool? result = sfd.ShowDialog();
if (result == true)
MessageBox.Show("File saved to" + sfd.SafeFileName);
}
“打印”对话框
// Create a print document.
pd = new System.Windows.Printing.PrintDocument();
// Show the print dialog.
pd.Print();
自定义对话框
ChildWindow
显示 show
可以通过 DialogResult 返回结果
弹出控件
Popup p = new Popup();
p.IsOpen = true;
======================