【问题标题】:WPF Textbox Template assistanceWPF 文本框模板帮助
【发布时间】:2021-12-26 23:01:30
【问题描述】:

我正在为一个文本框设置一个模板 - 我在设置该框的样式时遇到了问题,希望能得到一些帮助。这是我目前所拥有的:

---
     <Window.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBoxBase}">
                        <Border x:Name="Border">
                      <ScrollViewer x:Name="PART_ContentHost" Focusable="false"  HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Border">
                                    <Setter.Value>
                                        <Border BorderThickness="1" BorderBrush="Black" CornerRadius="0">
                                            <Border.Background>
                                                <RadialGradientBrush GradientOrigin="0.225,-0.616" RadiusY="0.863" RadiusX="0.757">
                                                    <GradientStop Color="#EEFFFFFF"/>
                                                    <GradientStop Color="#00FFFFFF" Offset="0.696"/>
                                                </RadialGradientBrush>
                                            </Border.Background>
                                        </Border>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                            <Trigger Property="IsKeyboardFocused" Value="True">

                            </Trigger>
                            <Trigger Property="IsKeyboardFocused" Value="False">
                                
                            </Trigger>

                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            

        </Style>

    </Window.Resources>
---

当我尝试编译它时,我收到一条消息:

Severity    Code    Description Project File    Line    Suppression State
Error   MC3000  'The 'Setter' start tag on line 22 position 34 does not match the end tag of 'Trigger'. Line 35, position 31.' XML is not valid.    

有人知道我在这里错过了什么或做错了什么吗?我认为我已经正确地关闭了所有的行。

【问题讨论】:

  • 我自己没有得到任何编译错误,你确定你已经发布了负责的实际代码吗?如果是这样,请尝试清理/重新启动/重建。
  • 首先,我还在学习 XAML,所以请多多包涵……但是您是否尝试过实际使用上面的代码,然后在表单中添加一个文本框以查看它的作用?我刚刚尝试了有关新项目的建议 - 将 Windows.Resources 放入,然后添加一个文本框,它会生成错误消息 ArgumentException: Must have non-null value for 'Setter.Property'。
  • 我的错,请看下面的答案。

标签: wpf templates textbox styles


【解决方案1】:

setter 的工作方式与您想象的不太一样。您当前正在模板中创建边框并为其指定 x:Name="Border",但随后尝试在触发器中覆盖它,并假设它将完全替换现有边框:

<Setter TargetName="Border">
    <Setter.Value>
       <Border BorderThickness="1" BorderBrush="Black" CornerRadius="0">

这不是 setter 的工作方式。 Setter 需要三样东西:

  1. 对要修改的对象的引用(尽管在某些情况下这是隐含的)。
  2. 您希望修改的该对象的属性名称。
  3. 该属性的新值。

您只提供 1 和 3,因此出现错误。与其尝试替换边框,不如修改现有边框的属性:

<ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter TargetName="Border" Property="BorderThickness" Value="1" />
        <Setter TargetName="Border" Property="BorderBrush" Value="Black" />
        <Setter TargetName="Border" Property="CornerRadius" Value="0" />
        <Setter TargetName="Border" Property="Background">
            <Setter.Value>
                <RadialGradientBrush GradientOrigin="0.225,-0.616" RadiusY="0.863" RadiusX="0.757">
                    <GradientStop Color="#EEFFFFFF"/>
                    <GradientStop Color="#00FFFFFF" Offset="0.696"/>
                </RadialGradientBrush>
            </Setter.Value>
        </Setter>
    </Trigger>
</ControlTemplate.Triggers>

在实践中,您通常会将所有这些都以自己的风格包装起来并应用它来保持代码整洁,但这是一个实现细节。

如果你真的想替换实际的边框对象,那么有办法做到这一点(例如,通过更改模板本身),但在大多数情况下,以上就足够了。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2015-08-30
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多