所以在Window.Resources
里面我有这个SolidColorBrush
:
在单独的文件(GridViewColumnHeader.xaml
(中,我有这个Style
:
<Style x:Key="ListViewHeaderDefaultStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Border BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent">
<TextBlock
x:Name="ContentHeader"
Text="{TemplateBinding Content}"
Padding="0,5,0,0"
Width="{TemplateBinding Width}"
TextAlignment="Left"
Margin="5,0,0,0"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Foreground" Value="{DynamicResource GridViewColumnHeaderForegroundColor}" />
<Setter Property="FontFamily" Value="Segoe UI" />
<Setter Property="FontSize" Value="12" />
</Style>
现在我想做的是通过隐藏的代码更改我的Style
Foreground
颜色:
SolidColorBrush solidColorBrush = (SolidColorBrush)this.TryFindResource("GridViewColumnHeaderForegroundColor");
if (solidColorBrush != null)
solidColorBrush.Color = Colors.Black;
但出于某种原因得到了这个InvalidOperationException
:
其他信息:无法在对象"#FFDCDCDC"上设置属性 因为它处于只读状态。
您可以定义另一个画笔并将其分配给样式的前台,而不是更改资源画笔。
但是,还有另一种方法可以实现您的目标。 看看这里。
首先,您还应该将使用的样式声明为 dynamicresource。
例:
<ListView VerticalAlignment="Bottom" Height="63" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView x:Name="test" ColumnHeaderContainerStyle="{DynamicResource ListViewHeaderDefaultStyle}" >
<GridViewColumn Header="header1"/>
</GridView>
</ListView.View>
</ListView>
现在,您可以通过像这样更改资源画笔来简单地更改前景色:
this.Resources["GridViewColumnHeaderForegroundColor"] = Brushes.Black;