【问题标题】:Style isn't working properly样式不能正常工作
【发布时间】:2016-09-06 15:51:49
【问题描述】:

在学习 WPF 的过程中,我创建了一种样式,它将圆角应用于文本框并设置背景颜色(如果控件具有焦点):

<Style TargetType="TextBox" x:Name="efTextBoxStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate >
                <Border x:Name="border" BorderThickness="1" CornerRadius="2">
                    <ScrollViewer x:Name="PART_ContentHost"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter TargetName="border" Property="BorderBrush" Value="Red"/>
                        <Setter Property="Background" Value="Blue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在运行时,如果控件获得焦点,边框会按预期呈现为红色,但文本框的背景色不会变为蓝色。

怎么了?

【问题讨论】:

  • 您忘记了 targetname=border。现在它没有设置背景。
  • @DannyvanderKraan 据我了解的问题,Michael 想要更改文本框背景,而不是边框​​的背景。
  • 是的,但他替换了控制器模板。那么这个模板中的文本框是什么?
  • 我和 enkryptor 在同一页面上,但现在它可以工作了。谢谢。

标签: wpf


【解决方案1】:

Setter 必须有一个 TargetName 否则它将不知道在哪里设置值。 在你的情况下: &lt;Setter TargetName="border" Property="Background" Value="Blue"/&gt;

【讨论】:

    【解决方案2】:

    这听起来可能有点混乱,但对于背景,您需要 TargetName="border"

    另一方面,对于前景,您不需要:

            <Style TargetType="TextBox" x:Name="efTextBoxStyle">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate x:Name="bal">
                        <Border x:Name="border" BorderThickness="1" CornerRadius="2">
                            <ScrollViewer x:Name="PART_ContentHost"/>
                        </Border>
                         <ControlTemplate.Triggers>
                            <Trigger Property="IsFocused" Value="True">
                                <Setter TargetName="border" Property="BorderBrush" Value="Red"/>
                                <Setter TargetName="border" Property="Background" Value="blue"/>
                                <Setter Property="Foreground" Value="yellow"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
    
        </Style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多