Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Wpf 为什么在声明textblock样式时不能更改标签的前景?_Wpf - Fatal编程技术网

Wpf 为什么在声明textblock样式时不能更改标签的前景?

Wpf 为什么在声明textblock样式时不能更改标签的前景?,wpf,Wpf,我想将textblock的默认前景设置为FF575757,因此我在APP.xaml中编写了以下代码: <Style TargetType="TextBlock"> <Setter Property="Foreground" Value="#FF575757"></Setter> </Style> 它运行良好 然而,在我使用控件模板对按钮进行编码后,我发现无论在XAML中设置前景值还是将其悬停

我想将textblock的默认前景设置为FF575757,因此我在APP.xaml中编写了以下代码:

<Style TargetType="TextBlock">
                <Setter Property="Foreground" Value="#FF575757"></Setter>
            </Style>
它运行良好

然而,在我使用控件模板对按钮进行编码后,我发现无论在XAML中设置前景值还是将其悬停,我都无法更改前景:

  <Button Foreground="Green">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Name="B" Cursor="{TemplateBinding Cursor}" SnapsToDevicePixels="True" UseLayoutRounding="True" ToolTip="{TemplateBinding ToolTip}">
                                    <Label FontSize="{TemplateBinding FontSize}" Foreground="{TemplateBinding Foreground}" FontFamily="{TemplateBinding FontFamily}" Name="TB" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Content="{TemplateBinding Content}"></Label>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsPressed" Value="false" />
                                            <Condition Property="IsMouseOver" Value="true" />
                                        </MultiTrigger.Conditions>
                                        <MultiTrigger.Setters>
                                            <Setter Property="Foreground" TargetName="TB" Value="White"/>
                                        </MultiTrigger.Setters>
                                    </MultiTrigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Button.Style>
        </Button>
我花了很长时间才发现问题,最后我偶然发现了一件事: 如果我删除APP.xaml中的textblock样式,前景问题就可以解决了。 但我感到奇怪的是,我只声明textblock的默认样式,而不声明标签。为什么textblock的样式会影响标签控件?
更重要的是,如果风格导致了这一点。如何不仅设置默认前景,而且使其可以根据需要随时更改?

wpf标签是一个内容控件


当您将标签的内容设置或绑定到字符串时,将创建一个文本块,并且它是您正在设置的文本。

但是有没有其他方法让我将默认前景设置为FF5757,并且我可以随时更改它?您需要触发器位于文本块上。您正在按钮上设置前景。这不会超过按钮中文本块上的设置。但是,我已经将前景模板绑定到标签控件。当我更改按钮的前景时,Label控件的前景将改变,对吗?而且,它似乎不会覆盖它,而是类似于将前景限制为样式中的值。我用上面的代码创建了一个全新的项目来测试它,结果证明是真的。我不知道为什么会这样,就像我上面说的。标签上有一个文本块。您的样式设置textblock的前景,这意味着它将使用该值,而不是它将继承的任何值。