2016-04-27 3 views
-1

У меня есть GridControl в WPF (это от DevExpress, но это не совсем так), и я пытаюсь создать заголовки на основе StaticResource.Настройка WPF Стиль StaticResource в ViewModel

Обычно то, что я мог сделать, это

<UserControl.Resources> 
    <Style x:Key="HeaderStyle" TargetType="dxg:HeaderContentControl"> 
     <Setter Property="FontWeight" Value="Bold" /> 
    </Style> 
</UserControl.Resources> 

<dxg:GridControl x:Name="MyParameters" ItemsSource="{Binding ParamRows}"> 
    <dxg:GridColumn ColumnHeaderContentStyle="{StaticResource HeaderStyle}" x:Name="ParamName" FieldName="ParamName" Width="80" Header="Parameter" /> 
    <dxg:GridColumn ColumnHeaderContentStyle="{StaticResource HeaderStyle}" x:Name="ParamValue" Binding="{Binding ParamValue}" Width="50" Header="Value" /> 
<!-- etc. --> 

..и что будет работать нормально.

Однако я динамически строю столбцы в ViewModel, поэтому мне нужно иметь возможность устанавливать программно ColumnHeaderContentStyle во время выполнения.

Так XAML имеет ...

<dxg:GridControl x:Name="Parameters" ItemsSource="{Binding ParamRows}" ColumnsSource="{Binding ParamColumns}"> 
    <!-- no list of rows. --> 

... и в C# код ...

ParamColumns.Add(new GridColumn 
{ 
    ColumnHeaderContentStyle = (Style)Application.Current.Resources["HeaderStyle"], 
    FieldName = "ParamName", 
    Width=80, 
    Header="Parameter" 
}); 


ParamColumns.Add(new GridColumn 
{ 
    ColumnHeaderContentStyle = (Style)Application.Current.Resources["HeaderStyle"], 
    Binding = new Binding("ParamValue"), 
    Width=50, 
    Header="Value" 
}); 

Немного исследований указал мне на использование Application.Current.Resources["HeaderStyle"], однако он возвращает null и поэтому стиль не применяется к заголовку.

Что я здесь делаю неправильно?

+0

Если бы это было, и я привержен этой конструкции, я бы сначала попробовать давая ViewModel 'Func FindResource {получить; задавать; } 'и иметь представление, установленное в' (resKey) => FindResource (resKey); 'Тогда модель viewmodel имеет доступ к знанию FrameworkElement о своем собственном контексте, не становясь более запутанными, чем они есть. –

ответ

0

Моим решением было установить стили в коде и назначить их таким образом. Кто точно не отвечает на вопрос, как указано в поле «Тема» моего поста, но он сделал трюк для меня:

private Style _headerStyle; 

// etc. etc. 
public SetColumns 
{ 
    _headerStyle = new Style(typeof(HeaderContentControl)); 
    _headerStyle.Setters.Add(new Setter(Control.FontWeightProperty, FontWeights.Bold)); 

    ParamColumns.Add(new GridColumn 
    { 
     ColumnHeaderContentStyle = _headerStyle, 
     FieldName = "ParamName", 
     Width=80, 
     Header="Parameter" 
    }); 


    ParamColumns.Add(new GridColumn 
    { 
     ColumnHeaderContentStyle = _headerStyle, 
     FieldName = "ParamValue", 
     Width=50, 
     Header="Value" 
    }); 
0

Почему вы не просто связать свойство «FontWeight» к чему-то в модели или ViewModel ..... что будет поддерживать шаблон MVVM

<UserControl.Resources> 
    <Style x:Key="HeaderStyle" TargetType="dxg:HeaderContentControl"> 
     <Setter Property="FontWeight" Value="{Binding FontWeightProp}" /> 
    </Style> 
</UserControl.Resources> 

 Смежные вопросы

  • Нет связанных вопросов^_^