0

我想为我的应用程序定义一个 XamDataGrid 的全局设置,但我希望其他开发人员能够在不覆盖整个设置的情况下覆盖特定设置。下面的示例 xaml:

   <igDP:FieldLayoutSettings x:Key="DefaultFieldLayoutSettings"
    HighlightAlternateRecords="True"
    FilterRecordLocation="OnTop"
    FilterUIType="LabelIcons"
    ReevaluateFiltersOnDataChange="True"
    SummaryDescriptionVisibility="Visible"
    GroupBySummaryDisplayMode="SummaryCellsAlwaysBelowDescription"
    AllowClipboardOperations="Copy"
    AllowRecordFixing="Top"
    AllowAddNew="False"
    AllowDelete="False"
    AutoFitMode="ExtendLastField"
    AutoGenerateFields="False"
    HeaderPrefixAreaDisplayMode="FieldChooserButton"
    HighlightPrimaryField="Highlight"
    FixedFieldUIType="Button"
    FixedRecordUIType="Button"
    DataRecordCellAreaStyle="{StaticResource defaultDataRecordCellArea}"
    />

    <igDP:FieldSettings x:Key="DefaultFieldSettings"
    AllowRecordFiltering="True"
    FilterClearButtonVisibility="Visible"
    FilterStringComparisonType="CaseInsensitive"
    FilterLabelIconDropDownType="MultiSelectExcelStyle"
    AllowSummaries="True"
    CellHeight="200"
    SummaryDisplayArea="BottomFixed"
    SummaryUIType="MultiSelectForNumericsOnly"
    AllowEdit="False"
    AllowFixing="Near"
    AllowGroupBy="True"
    AllowResize="True"
    />
    <Style x:Key="DefaultXamDataGridStyle" TargetType="{x:Type igDP:XamDataGrid}">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Theme" Value="Office2010Blue" />
    <Setter Property="IsNestedDataDisplayEnabled" Value="False"/>
    <Setter Property="ClipboardCellDelimiter" Value=","/>
    <Setter Property="ClipboardRecordSeparator" Value=";"/>
    <Setter Property="IsUndoEnabled" Value="True"/>
    <Setter Property="FieldLayoutSettings" Value="{StaticResource   DefaultFieldLayoutSettings}"/>
    <Setter Property="FieldSettings" Value="{StaticResource DefaultFieldSettings}"/>
 </Style>    

视图中的实际 xaml。

   <igDP:XamDataGrid DataSource="{Binding Path=QueryStatuses}" Style="{StaticResource 
      DefaultXamDataGridStyle}">
            <igDP:XamDataGrid.FieldSettings>        
                <igDP:FieldSettings  CellClickAction="SelectRecord" />
            </igDP:XamDataGrid.FieldSettings>
    </igDP:XamDataGrid>

现在有办法只覆盖本地 fieldSetings 中明确定义的内容并保留其他全局设置。现在,本地 FieldSetting 覆盖了全局 fieldSettings,这是有道理的。

4

1 回答 1

1

这在 XAML 中是不可能的,因为 FieldSetings 不是从 FrameworkElement 派生的,因此您不能让样式直接针对它们。当您将 FeildSetting 设置为针对 XamDataGrid 的样式以及定义 XamDataGrid 的位置时,本地的将始终是唯一使用的样式。

一种可能的替代方法是创建一个派生自 FieldSettings 的对象,并在该对象的构造函数中设置所需的设置,然后在使用网格时使用自定义 FieldSettings 对象而不是默认对象。例如:

public class CustomFieldSettings:FieldSettings
{
    public CustomFieldSettings():base()
    {
        this.CellClickAction = CellClickAction.SelectRecord;
    }
}

然后你会在 XAML 中使用它:

<igDP:XamDataGrid x:Name="XamDataGrid1">
    <igDP:XamDataGrid.FieldSettings>
        <local:CustomFieldSettings CellClickAction="EnterEditModeIfAllowed" />
    </igDP:XamDataGrid.FieldSettings>
...
</igDP:XamDataGrid>

这种方法将允许您创建自定义并编辑任何设置。

于 2012-10-23T01:09:51.093 回答