UserControl样式 - 无法将样式转换为Brush

时间:2017-12-25 12:25:16

标签: c# wpf xaml wpf-style

我正在研究WPF应用程序。我有shared.xaml中的默认样式的用户控件和主题样式(将不同样式的XAML文件耦合在一起)。

问题是我收到消息无法转换类型对象" System.Windows.Style"输入" System.Windows.Media.Brush" 在用户控件中共享样式包含如下:

Style="{StaticResource statusBar}"

注意:当我删除此行时,状态栏中没有错误且没有样式(因此问题出在该样式文件中)。

在shared.xaml

<Style x:Key="statusBar" TargetType="{x:Type UserControl}">
    <Setter Property="Background" Value="{DynamicResource StatusBarBackgroud}"/>
    <Setter Property="FontFamily" Value="{DynamicResource FontFamilyStatusBar}"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Foreground" Value="{DynamicResource ForegroundStatusBar}"/>
</Style>

问题是前景(在LightTheme.xaml中共享文件指向它)

<Style x:Key="ForegroundStatusBar" >
    <Setter Property="Control.Foreground" Value="LightBlue" />  
</Style>

2 个答案:

答案 0 :(得分:1)

Foreground属性是Brush类型。当ForegroundStatusBar资源为{DynamicResource ForegroundStatusBar}时,您无法在那里分配Style。如果前景应该从基本样式继承,请在派生样式

中使用BasedOn参数
<Style x:Key="statusBar" TargetType="{x:Type UserControl}" 
       BasedOn="{StaticResource ForegroundStatusBar}">
    <Setter Property="Background" Value="{DynamicResource StatusBarBackgroud}"/>
    <Setter Property="FontFamily" Value="{DynamicResource FontFamilyStatusBar}"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <!--Foreground setter removed-->
</Style>

答案 1 :(得分:0)

试试这个:

<Style x:Key="ForegroundStatusBar"
   TargetType="{x:Type UserControl}">
   <Setter Property="Foreground" Value="LightBlue"></Setter>
</Style>