我在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
,因此样式不会应用于标题。
我在这里做错了什么?
答案 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>