所以在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
:
附加信息:无法在对象上设置属性&#39;#FFDCDCDC&#39; 因为它处于只读状态。
答案 0 :(得分:1)
您可以定义另一个画笔并将其指定给样式的前景,而不是更改资源画笔。
但是,还有另一种方法可以实现目标。 Have a look here.
首先,您应该将使用的样式声明为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;