我在WPF中有一个GridControl(它来自DevExpress,但这不是真正的重点),我试图根据StaticResource
来设置样式。WPF设置ViewModel中的样式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
所以样式不适用于标题。
我在这里做错了什么?
如果是我的话,我都致力于这个设计,我先试试给视图模型一个'Func键<对象,对象> FindResource {获得;组; }'属性,并让视图将其设置为'(resKey)=> FindResource(resKey);'然后viewmodel可以访问FrameworkElement对其自身上下文的了解,而不会让事情更加纠结。 –