代码改变世界

Silverlight控件词条学习

2010-08-13 11:33  撞破南墙  阅读(992)  评论(0编辑  收藏  举报

如果你看过MSDN中Silverlight关于控件的词条

本文可以跳过了。如果你是“功利”派。可以浏览一下。

控件内容模型 

1控件内容模型 

1.1文本控件

控件

内容类型

内容属性

TextBlock

Text

TextBlock.Text

TextBlock.Inlines

TextBox

Text

TextBox.Text

RichTextBox

Text

RichTextBox.Blocks

PasswordBox

Text

PasswordBox.Password

 

TextBlock 继承自 frameworkElement

里面的行是

Text 属性接受 StringInlines 属性接受InlineCollection

InlineCollection 接受 Inline 对象 

TextTrimming 枚举

描述当文本溢出其包含框的边缘时如何修整文本。

 

RichTextBox

方案

建议控件

显示无格式纯文本。

TextBlock

显示格式化文本、段落、超链接或内联图像。

RichTextBox

输入或编辑纯文本,例如在某一窗体中。

TextBox

输入或编辑格式化文本、段落、超链接或内联图像。

RichTextBox

编辑要求格式、段落、超链接或内联图像的文档、文章或博客。

RichTextBox

应用字符或段落格式。

RichTextBox

 

 

 TabNavigation

KeyboardNavigationMode

 

Local

只有 Tab 索引位于此容器内时,才会在本地子树上考虑这些索引。

 

Cycle

当到达容器内的第一个或最后一个键盘导航位时,

焦点返回到第一个或最后一个键盘导航位。

 

Once

容器及其所有子元素整个只能接收焦点一次。

 

TextBlock 

 控件是在基于 Silverlight 的应用程序中用于显示文本的主要元素。如果您需要显示包含必填字段或验证错误指示器的另一控件的标题,请使用 Label 控件。 

 

1.2显示单个元素和标题的控件

Header 属性属于 Object 类型,因此与 Content 属性一样,

对标题可以包含的内容也没有限制。 

1.3显示项集合的控件

ListBoxComboBoxTreeView 和 TabControl 都是项控件.

ListBoxItemComboBoxItemTreeViewItem 和 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 

表示包含一个标题和项集合的控件 

 

显示用户界面元素的控件 

PanelGridCanvas 和 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 后设置一个断点,则不引发异常。

打开文件对话框

http://msdn.microsoft.com/zh-cn/library/system.windows.controls.openfiledialog.filterindex(v=VS.95).aspx 

保存文件对话框

 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;

 ======================