2016-04-27 17 views
-1

私はWPFのGridControlを持っています(それはDevExpressのものですが、それは実際にはポイントではありません)、私はStaticResourceに基づいてヘッダのスタイルを設定しようとしています。WPF設定スタイルStaticResource in 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. --> 

..andです。

しかし、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

を維持する、と私は、このデザインにコミットされた 'のFunc <オブジェクト、オブジェクト>にfindResource {取得します。セット; 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を与えるしようとするだろう、それは私だったらViewModelには.....それはMVVMパターン

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