动态属性,您可以显示和编辑特性指定给 Vault 类别不需要修改 XAML 文件。
当添加新特性,Vault 类别,这些特性将自动显示下一次 “Data Standard” 对话框或选项卡的显示。
动力学属性由 DataGrid 的 XAML 控件,有两个列。 第一列是只读的,并显示特性名称。第二列中更加复杂,因为它已显示不同的控制不同类型(例如,“ ComboBox ” 属性具有预定义的值列表中,DataPicker 属性的类型日期)。
DataGrid 控制
添加动态属性控制” 对话框,则将以下行需要 :
... <DataGrid x:Name="DSDynamicCategoryProperties" AutoGenerateColumns="False" HeadersVisibility="Column" ItemsSource="{Binding DynamicProperties}" ScrollViewer.CanContentScroll="False" HorizontalGridLinesBrush="WhiteSmoke" VerticalGridLinesBrush="WhiteSmoke"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Name}" SortDirection="Ascending" Width="140" IsReadOnly="True" > <DataGridTextColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding DataContext.UIString[LBL64], RelativeSource={RelativeSource AncestorType=DataGrid}}"/> </DataTemplate> </DataGridTextColumn.HeaderTemplate> </DataGridTextColumn> <DataGridTemplateColumn CellStyle="{StaticResource DynamicDataGridCellStyle}" Width="*" > <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding DataContext.UIString[LBL65], RelativeSource={RelativeSource AncestorType=DataGrid}}"/> </DataTemplate> </DataGridTemplateColumn.HeaderTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> ...
第二列中使用样式 ( 单元 = " {StaticResourceDynamicDataGridCellStyle} ) 也必须添加到 XAML 文件在 “资源” 部分。 这会处理所有不同的控件 :
... <Window.Resources> <Style x:Key="DynamicDataGridCellStyle" TargetType="{x:Type DataGridCell}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <ComboBox ItemsSource="{Binding ListValues}" Text="{WPF:ValidatedBinding Value}" IsEditable="True"></ComboBox> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> </Trigger> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/> </Trigger> <DataTrigger Binding="{Binding ListValues.Count}" Value="0"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <TextBox Text="{WPF:ValidatedBinding Value}"></TextBox> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> <DataTrigger Binding="{Binding Typ}" Value="DateTime"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <DatePicker SelectedDate="{WPF:ValidatedBinding Value, StringFormat='dd/MM/yyyy'}"/> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> <DataTrigger Binding="{Binding Typ}" Value="Bool"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <ComboBox Text="{WPF:ValidatedBinding Value}"> <system:Boolean>True</system:Boolean> <system:Boolean>False</system:Boolean> </ComboBox> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> ...
XAML 绑定 DynamicProperties
注视该代码行在先前的示例 :
ItemsSource = " {Binding DynamicProperties} "
此代码获取列表中的 iProperty 图元将被指定给类别。 “ iProperty ” 对象具有等,这些成员可用于绑定:
XAML 绑定 DynamicPropertiesCategory
为了使 DynamicProperties 绑定返回,Vault 类别必须指定第一个。 在 “默认实施时,使用 Data Standard,DynamicPropertiesCategory 获取指定通过组合框 :
... <ComboBox Name="Categories" ItemsSource="{Binding PsList[GetCategories]}" SelectedIndex="0" DisplayMemberPath="Name" SelectedItem="{Binding DynamicPropertiesCategory}" Text="{Binding Prop[_Category].Value}" Grid.Row="0" Grid.Column="1" IsEnabled="{Binding IsNewEntryDialog}"> </ComboBox> ...
列表中可用的 Vault 类别 ( ItemsSource = " {Binding PsList [GetCategories] }” ) 将返回 GetCategories PowerShell 函数 ”。 在 “默认实现,这只返回所有类别。如果只应提供某些类别(例如,基于文档类型), 此函数必须调整。
选定的类别从组合框设置 DynamicPropertiesCategory :
( SelectedItem = "{Binding DynamicPropertiesCategory}" )
单击此处可了解有关动态特性标签的详细信息。