Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > использование стиля


Автор: namespace 12.11.2008, 23:47
есть infragrafics-овый грид, вернее их много, FieldLayoutSettings у них одинаковый
Код

<igDP:XamDataGrid ...>
    <igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:FieldLayoutSettings AllowAddNew="True" AddNewRecordLocation="OnTopFixed" ... />
    </igDP:XamDataGrid.FieldLayoutSettings>
</igDP:XamDataGrid>

встал вопрос о том что неправильно это все дело везде дублировать и руками Ctrl-C Ctrl-V при изменении все время делать
сделал Resources.xaml
Код

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:igDP="http://infragistics.com/DataPresenter">
    <Style x:Key="DataGridSettings" TargetType="{x:Type igDP:FieldLayoutSettings}">
        <Setter Property="AutoGenerateFields" Value="false"/>
        ...
    </Style>
</ResourceDictionary>

изменил App.xaml
Код

<Application x:Class="GeographicalObjectApplication.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

меняю первый (рабочий) фрагмент кода на
Код

<igDP:XamDataGrid ... FieldLayoutSettings="{StaticResource DataGridSettings}">

запускаю...
на строчку
Код

<Style x:Key="DataGridSettings" TargetType="{x:Type igDP:FieldLayoutSettings}">

выскакивает: 
'FieldLayoutSettings' type must derive from FrameworkElement or FrameworkContentElement.  Error at object 'DataGridSettings' in markup file 'GeographicalObjectApplication;component/Resources.xaml' Line 4 Position 37.

что неправильно?

Автор: Partizan 13.11.2008, 09:16
namespace, Стиль должен применяться к контролу, а не к FieldLayoutSettings
если уж хочется через StaticResource:

Код

<Application x:Class="GeographicalObjectApplication.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:igDP="http://infragistics.com/DataPresenter"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
          <igDP:FieldLayoutSettings x:Key ="DataGridSettings"  AllowAddNew="True" AddNewRecordLocation="OnTopFixed" ... />
    </Application.Resources>
</Application>


И вот теперь уже можно писать

Код

<igDP:XamDataGrid ... FieldLayoutSettings="{StaticResource DataGridSettings}">

Автор: namespace 13.11.2008, 09:55
Большое спасибо!
А с точки зрения WPF вынести в статические ресурсы параметры нескольких одинаковых гридов - это правильный подход?

Автор: Partizan 13.11.2008, 10:01
namespace, ну а почему бы и нет? Если вынести в ресурсы, то у вас будет один единственный объект FieldLayoutSettings, на который все ваши XamDataGrid будут ссылаться.

Подход вполне оправданный smile

Автор: namespace 13.11.2008, 11:32
с одним свойством понятно, а вот например:
Код

<igDP:XamDataGrid Grid.Column="1" Grid.Row="2" Margin="0,0,3,0" Name="dataGrid" xmlns:igDP="http://infragistics.com/DataPresenter"
     FieldLayoutSettings="{StaticResource DataGridSettings}" 
     Theme="Generic" BorderThickness="1" GroupByAreaLocation="AboveDataArea" ClipToBounds="False" 
     AutoFit="True" IsGroupByAreaExpanded="False" IsNestedDataDisplayEnabled="True" />

возможно сделать чтобы, например, вот эти свойства:
Код

Theme="Generic" BorderThickness="1" GroupByAreaLocation="AboveDataArea" ClipToBounds="False" 
AutoFit="True" IsGroupByAreaExpanded="False" IsNestedDataDisplayEnabled="True" 

брались из того же ресурсного файла, что и FieldLayoutSettings, но чтобы не надо было для каждого свойства писать
Код

свойство="{StaticResource ресурс}" 

?

Автор: Partizan 13.11.2008, 12:51
namespace, ну это уже придётся реализовать стилями...

Код

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:igDP="http://infragistics.com/DataPresenter">

    <igDP:FieldLayoutSettings x:Key ="fldLayoutSettings"  AllowAddNew="True" AddNewRecordLocation="OnTopFixed" ... />

    <Style x:Key="DataGridSettings" TargetType="{x:Type igDP:XamDataGrid}">
        <Setter Property="FieldLayoutSettings" Value="{StaticResource fldLayoutSettings}"/>
        <Setter Property="Theme" Value="Generic"/>
        ...и т.д.
    </Style>
</ResourceDictionary>



Автор: namespace 13.11.2008, 13:31
большое спасибо, многое стало ясным  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)