Глобальное определение свойств XamDataGrid с возможностью локального изменения

Я хочу определить глобальную настройку для 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>

Теперь есть способ переопределить только то, что явно определено в локальных параметрах поля, и сохранить другие глобальные настройки. Прямо сейчас локальный FieldSetting переопределяет глобальные fieldSettings, что имеет смысл.


person Jack_2060    schedule 22.10.2012    source источник


Ответы (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>

Такой подход позволит вам создавать свои настройки и редактировать любые настройки.

person alhalama    schedule 23.10.2012
comment
В идеальном сценарии я хотел бы любую возможную настройку, но я могу сделать и с определенной настройкой. например, для CellClickAction. Как я могу это сделать? - person Jack_2060; 23.10.2012
comment
Я отредактировал свой ответ, включив в него подход, который может сработать для вас. - person alhalama; 24.10.2012