Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法覆盖wpf中的前景色控件_C#_.net_Wpf - Fatal编程技术网

C# 无法覆盖wpf中的前景色控件

C# 无法覆盖wpf中的前景色控件,c#,.net,wpf,C#,.net,Wpf,嗨,这是一个让我疯狂了好几天的问题 简单地说,每当我在从TextBlock控件派生的任何对象上声明前景色时,前景色在设计时被识别,但在运行时它总是默认为黑色 就好像控件上的前台属性被忽略一样 因此,例如,通常情况下,我希望以下内容呈现带有白色文本的按钮: <Button x:Name="MyButton" Content="Hello World" Foreground="White" ... /> 但是,这会渲染一个按钮,前景文本颜色为黑色。它实际上忽略了前台setter属性

嗨,这是一个让我疯狂了好几天的问题

简单地说,每当我在从TextBlock控件派生的任何对象上声明前景色时,前景色在设计时被识别,但在运行时它总是默认为黑色

就好像控件上的前台属性被忽略一样

因此,例如,通常情况下,我希望以下内容呈现带有白色文本的按钮:

<Button x:Name="MyButton" Content="Hello World" Foreground="White" ... />

但是,这会渲染一个按钮,前景文本颜色为黑色。它实际上忽略了前台setter属性

使其按预期工作的唯一方法是执行以下操作:

<Button x:Name="MyButton" .... >
     <TextBlock Text="Hello World" Foreground="White"/>
</Button>

这种方式可以工作,并且按钮可以正确地以白色文本呈现。但我知道我不应该像这样明确定义按钮文本块

从textblock派生的任何对象都会出现相同的行为

有人知道为什么会这样吗

更新: 我已检查了应用于TextBox的样式的解决方案。我在TextBlock上定义了自己的风格,即:

<Style x:Key="TextBlockText" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="#FF63798F"/>
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="VerticalAlignment" Value="Bottom"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>

如您所见,它定义了前景的值然而当我从资源字典中删除此样式时,上述问题仍然存在

其他信息是,我正在使用MahApps.Metro库,我想知道这是否是问题的根源


有人有其他想法吗?或者甚至考虑在哪里进行调查???

WPF中的每个控件都有一个与其关联的模板。我想你的按钮上定义了一种风格,它不包括前台属性

比如说,

    <Style x:Key="DialogButtonStyle" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Ellipse Fill="{TemplateBinding Background}"
                             Stroke="{TemplateBinding BorderBrush}"/>
                       <TextBlock Foreground="{TemplateBinding Foreground}">
                        <ContentPresenter HorizontalAlignment="Center"
                                          VerticalAlignment="Center"/></TextBlock>
                </Grid>            
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


可以使用Style={StaticResource DialogButtonStyle}并为按钮定义前景吗。请看这里,我们在文本块的前景上使用了TemplateBinding,而不是在其中定义颜色

我建议保持TextBlock样式不变,并在模板级别的按钮或其他控件中添加具有TextBlock样式的新资源。它将位于该模板的域中,因此不会影响其他TextBlock,但会覆盖主TextBlock的样式

例如:

<ControlTemplate>
  <Grid>
    <Grid.Resources>
          <!-- Put a new/duplicate TextBlock Style here with 
               the appropriate Foreground color, or TemplateBinding 
               and it will override it for this Grid's children -->
    </Grid.Resources>
    <TextBlock />
  </Grid>
</ControlTemplate>


你确定吗?这对我很有用
您可能有一个TextBlock默认样式,该样式将前景设置为黑色,请查看整个解决方案中的TargetType=“{x:Type TextBlock}以及检查TargetType=“Button“或者钮扣座。样式肯定有问题。@RohitVats我肯定这是我希望发生的事情,但不幸的是它没有发生。@makc我也检查了这一点,我拥有的唯一文本块样式是我自己专门定义的样式。如果我删除这个,问题仍然存在。