![](/img/trans.png)
[英]WPF TextBox with StaticResource for Style and Text-Binding to property at ViewModel
[英]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.