簡體   English   中英

WPF 在 ViewModel 中設置 Style StaticResource

[英]WPF setting Style StaticResource in ViewModel

我在 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 ,因此樣式不適用於標題。

我在這里做錯了什么?

我的解決方案是在代碼中設置樣式並以這種方式分配它們。 沒有完全回答我帖子的“主題”中指定的問題,但它對我有用:

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

為什么不簡單地將 'FontWeight' 屬性綁定到 Model 或 ViewModel 中的某些東西..... 這將保持 MVVM 模式

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM