WPF:无法通过代码隐藏更改样式 SolidColorBrush,因为只读状态



所以在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>

现在我想做的是通过隐藏的代码更改我的StyleForeground颜色:

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;

相关内容

  • 没有找到相关文章

最新更新