2012-10-22 21 views
0

我想爲我的applcation定義XamDataGrid的全局設置,但是我希望其他開發人員能夠覆蓋特定設置而不會覆蓋整個事物。下面 樣品XAML:在視圖全局定義XamDataGrid屬性,允許本地修改

<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,這是有道理的。

回答

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> 

這種方法可以讓你創建自定義和編輯任何設置。

+0

在完美的情況下,我想任何可能的設置,但我也可以做一個特定的設置。例如:CellClickAction。我怎樣才能做到這一點? –

+0

我編輯了我的答案,其中包含可能適用於您的方法。 – alhalama

+0

這可以工作,謝謝。 –