WPF在ViewModel中设置Style StaticResource

时间:2016-04-27 16:12:18

标签: c# wpf mvvm staticresource

我在WPF中有一个GridControl(它来自DevExpress,但这不是重点)我正在尝试根据StaticResource设置标题样式。

通常我能做的是

<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,因此样式不会应用于标题。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我的解决方案是在代码中设置样式并以这种方式分配它们。并没有完全回答&#34;主题&#34;中指定的问题。我的帖子,但它为我做了诀窍:

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"
    });

答案 1 :(得分:0)

为什么不简单地绑定&#39; FontWeight&#39; Model或ViewModel中某些东西的属性......将维护MVVM模式

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