为什么TextBox不继承背景色?

哈里·威尔

这是一个完全可重现的示例:

<Window x:Class="DemoWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid Name="GridMain">

        <Grid.Resources>
            <Style x:Key="{x:Type Grid}">
                <Setter Property="Control.Background" Value="Red"/>
            </Style>
        </Grid.Resources>

        <StackPanel>
            <Label>First Content</Label>
            <TextBox>First Edit</TextBox>
            <StackPanel>
                <Label>Second Content</Label>
                <TextBox>Second Edit</TextBox>
            </StackPanel>
        </StackPanel>
        
    </Grid>
</Window>

输出如下: 窗口和标签有红色背景,但TextBox有白色背景。

我感到困惑的是,该TextBox控件具有一个BackgroundProperty继承自Control-控件,与没什么不同Label但是,可以看出TextBoxes的背景色没有改变。尽管Grid没有Control.Background属性,但是具有Panel.Background属性,但是即使设置的属性是,也仍然设置了其背景属性Control.Background

那个家伙

我感到困惑的是,TextBox类具有从控件继承的BackgroundProperty-与Label没什么不同。但是,可以看出,TextBox的背景色没有更改。

每个控件都有一个默认样式和控件模板它们定义了控件的必需部分,外观和视觉状态。Background是,其中一个属性可以或可以不被限定,这取决于控制。对于您使用的控件,背景的定义如下:

因此,Label看起来是红色,但不是。通过背景可以看到的StackPanel背景。对于,背景不会因依赖项属性设置优先级而改变默认隐式样式的背景值Just优先于本地样式设置器。GridTransparentTextBoxTextBox

现在做什么?为背景分配更高的优先级,例如:

  • 将其添加为本地值。

  • 定义样式并将其直接分配给的Style属性TextBox

  • 为定义隐式样式 TextBox

    <Style x:Key="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
       <Setter Property="Control.Background" Value="Red"/>
    </Style>
    

尽管Grid没有Control.Background属性,但是具有Panel.Background属性,但是即使设置的属性是,它仍然具有其背景属性设置Control.Background

这是WPF中的另一个实现细节。如您在的参考源中所Panel看到的,它定义了Background属性,但是当您查看的参考源时Control,您可以看到它没有定义Background属性本身,而是将自身添加为定义属性的所有者Panel从以下文档中AddOwner

通常,AddOwner用于将依赖项属性添加到尚未通过托管类继承公开该依赖项属性的类(类继承将导致包装器属性被派生类继承,因此将提供对依赖属性)。AddOwner使属性系统能够识别最初没有注册该依赖项属性的类型的依赖项属性。

换句话说,这些属性的工作就像继承它们一样,并且XAML处理器足够聪明,可以识别Control.BackgroundPanel.Background属性基本相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么background-color:none不覆盖指定的背景色?

来自分类Dev

在Chrome中,添加边框半径还会添加背景色。为什么?

来自分类Dev

如何使子div从其父div“不继承背景色”?

来自分类Dev

继承嵌套表中的背景色?

来自分类Dev

为什么在设置自定义边框或背景色时,Firefox在选择箭头按钮上设置背景色?

来自分类Dev

为什么背景色不显示?

来自分类Dev

为什么ImageView的png图像中包含背景色?

来自分类Dev

为什么我的可绘制视图的背景色是黑色的?

来自分类Dev

具有伪元素继承父级背景色

来自分类Dev

不尊重Minicom黑色背景色

来自分类Dev

为什么我的背景色无法在ComboBox中使用

来自分类Dev

继承许多UIViewControllers的背景色和其他属性

来自分类Dev

为什么不从CSS应用我的背景色?

来自分类Dev

为什么Word中的背景色无法打印?

来自分类Dev

为什么我的背景色不显示?

来自分类Dev

为什么背景色不适用?

来自分类Dev

为什么该背景色不会覆盖其他背景色?

来自分类Dev

C#透明标签,如何继承背景色

来自分类Dev

为什么我的背景色结束了?

来自分类Dev

QWidget不绘制背景色

来自分类Dev

JFrame不更新背景色

来自分类Dev

如何使子div从其父div“不继承背景色”?

来自分类Dev

为什么背景色不起作用?

来自分类Dev

zsh提示扩展:为什么%b取消背景色?

来自分类Dev

具有伪元素继承父级背景色

来自分类Dev

不尊重Minicom黑色背景色

来自分类Dev

为什么我的背景色无法在ComboBox中使用

来自分类Dev

为什么不应用我的背景色(Aspose Cells)?

来自分类Dev

为什么Shellharden在Terminator中不输出背景色?

Related 相关文章

热门标签

归档