WPF绑定背景为SolidColorBrush

时间:2019-04-19 08:10:22

标签: wpf vb.net

我有这个网格:

@Html.DropDownListFor(m => m.DistrictId,                
    new List<SelectListItem> { 
    new SelectListItem { Value = "0" , Text = "Option A" },
    new SelectListItem { Value = "1" , Text = "Option B" }
    }, new { @class="classname"})

在我的代码中,如果我这样设置背景:

    <Grid x:Name="topGrid"  Height="100" VerticalAlignment="Top" Margin="10,0,0,0" />

使用此扩展程序:

topGrid.Background = "#FF3C3C3C".ToBrush()

我可以很好地更改背景,但是我的表单上有大约20个网格,我想使用绑定一次更改所有网格的背景。

我已经尝试过这样做:

这是xml:

Module Extensions
<Extension()>
Function ToBrush(ByVal HexColorString As String) As SolidColorBrush
    Return CType((New BrushConverter().ConvertFrom(HexColorString)), 
SolidColorBrush)
End Function
End Module 

这是代码:

 <Grid x:Name="topGrid" Background="{Binding MyBackgroundColor}" Height="100" VerticalAlignment="Top" Margin="10,0,0,0" >

1 个答案:

答案 0 :(得分:2)

如果要更改许多网格上的所有背景,则样式是另一种方法。 尽管这是c#,但是代码很少,您可以通过在线转换器运行它。

为了快速起见,我已经在app.xaml中完成了此操作,但您希望将其放入合并在app.xaml中的适当应用程序中的资源字典中。

<Application.Resources>
    <SolidColorBrush x:Key="gridBackgroundBrush" Color="Blue"/>
    <Style TargetType="{x:Type Grid}">
        <Setter Property="Background" Value="{DynamicResource gridBackgroundBrush}"/>
    </Style>
</Application.Resources>
</Application>

您可以更改画笔:

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Color colour = (Color)ColorConverter.ConvertFromString("#FFD700");
        Application.Current.Resources["gridBackgroundBrush"] = new SolidColorBrush(colour);
    }

如果您不希望一个或两个网格具有这种行为,则可以将其背景设置为白色或透明,这样优先于样式。

如果您的需求更复杂,那么您可能会丢失样式,而是直接将资源用作DynamicResource。这可能是克莱门斯的意思。

 <Grid Background="{DynamicResource gridBackgroundBrush}"