如何在XAML中将CueBanner应用于文本框

拉迪斯拉夫·翁德里斯(Ladislav Ondris)

我想要一个带有CueBanner的TextBox,但是它仍然无法正常工作。我做错了什么?我认为问题在于我正在{RelativeSource TemplatedParent}参考资料中使用在不投入资源的情况下如何做到这一点?

我的XAML程式码:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="MinWidth" Value="120" />
    <Setter Property="MinHeight" Value="20" />
    <Setter Property="AllowDrop" Value="true" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <ControlTemplate.Resources>
                    <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
                        <VisualBrush.Visual>
                            <Label Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}"
                                       Foreground="LightGray" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </ControlTemplate.Resources>

                <Border x:Name="Border" CornerRadius="0" Padding="2" BorderThickness="1" BorderBrush="Black">
                    <ScrollViewer Margin="0" x:Name="PART_ContentHost" />
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
                        <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
                    </Trigger>
                    <Trigger Property="Text" Value="{x:Null}">
                        <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
                    </Trigger>
                    <Trigger Property="IsKeyboardFocused" Value="True">
                        <Setter Property="Background" Value="LightGreen"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

感谢您的任何建议。

编辑

我的问题已解决,这是我的最终解决方案:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
    <Setter Property="BorderBrush" Value="Gray"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="AllowDrop" Value="true"/>
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="True" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="Border" CornerRadius="0" Padding="2" 
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="1"
                        Background="{TemplateBinding Background}">
                    <Grid>
                        <ScrollViewer Margin="0" x:Name="PART_ContentHost" />
                        <TextBlock x:Name="Watermark"
                               Text="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"
                               Foreground="LightGray" Margin="5,0" Visibility="Collapsed"/>
                    </Grid>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
                        <Setter Property="Visibility" TargetName="Watermark" Value="Visible" />
                    </Trigger>
                    <Trigger Property="Text" Value="{x:Null}">
                        <Setter Property="Visibility" TargetName="Watermark" Value="Visible" />
                    </Trigger>
                    <Trigger Property="IsMouseCaptured" Value="True">
                        <Setter Property="Visibility" TargetName="Watermark" Value="Collapsed"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" TargetName="Border" Value="0.56"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Cursor" Value="IBeam" />
        </Trigger>
    </Style.Triggers>
</Style>
克里斯·W

因此,我一开始不确定“ CueBanner”是什么意思,直到我意识到它几乎就是“ Watermark”的代名词。因此,作为一个简单的示例,这将是一种快速简便的替代方法(因为乍一看,我不明白是什么原因使VisualBrush您在其中必需的东西变得更干净了),尽管我确定您可以我想更改我仅用于示例的颜色。您可能还需要研究扩展工具包之类的内置功能,但是例如,其水印与本示例不同。

无论如何,概念示例Style模板(注意已添加了mscorlib命名空间,以防您在自己的词典中没有它sys:String。)

<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/>
<SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/>
<SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/>

<Style x:Key="CWWatermarkTextBoxStyle" TargetType="{x:Type TextBox}" 
       xmlns:sys="clr-namespace:System;assembly=mscorlib">
   <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
   <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
   <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
   <Setter Property="BorderThickness" Value="1"/>
   <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
   <Setter Property="HorizontalContentAlignment" Value="Left"/>
   <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
   <Setter Property="AllowDrop" Value="true"/>
   <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
   <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type TextBox}">
            <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
               <Grid>
                  <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                  <TextBlock x:Name="GenericWatermark"
                             Text="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"
                             Foreground="Red" Margin="5,0" Visibility="Collapsed"/>
               </Grid>
            </Border>
         <ControlTemplate.Triggers>
            <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
               <Setter Property="Visibility" TargetName="GenericWatermark" Value="Visible" />
               <Setter Property="Background" Value="Yellow" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
               <Setter Property="Opacity" TargetName="border" Value="0.56"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="true">
               <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="true">
               <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
               <Setter Property="Visibility" TargetName="GenericWatermark" Value="Collapsed"/>
            </Trigger>
         </ControlTemplate.Triggers>
      </ControlTemplate>
   </Setter.Value>
   </Setter>
   <Style.Triggers>
      <MultiTrigger>
         <MultiTrigger.Conditions>
            <Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
            <Condition Property="IsSelectionActive" Value="false"/>
         </MultiTrigger.Conditions>
         <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
      </MultiTrigger>
   </Style.Triggers>
</Style>

....以及实例中的用法;

<TextBox Tag="HEY LOOK! I'M A TEXTBOX WITH A WATERMARK! WEEEE! :)"
         Style="{StaticResource CWWatermarkTextBoxStyle}"/>

Voila,一个带水印的快速简单的wpf xaml文本框。希望这会有所帮助,欢呼。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不指定每个文本框的情况下将相同功能应用于控制器中的所有文本框

来自分类Dev

将 DropShadowEffect 应用于 WPF 文本框文本

来自分类Dev

将vbCrLf应用于文本框的内容

来自分类Dev

如何将JavaScript应用于具有不同ID的文本框数组?

来自分类Dev

如何将边框应用于焦点上的文本框?

来自分类Dev

如何将主题应用于从文本框继承的Custome控件

来自分类Dev

文本框样式未应用于 ItemsPresenter 文本框

来自分类Dev

如何在XAML中将按钮绑定到滑块和文本框

来自分类Dev

如何在R中将创建列的函数应用于数据框

来自分类Dev

如何在Python中将方法/函数应用于数据框

来自分类Dev

如何在熊猫数据框中将不同的条件应用于不同月份?

来自分类Dev

如何在Swift中将样式应用于所有文本字段

来自分类Dev

如何在SwiftUI中将strikethrough()应用于点击的foreach文本项?

来自分类Dev

如何在Blazor中将焦点设置为文本框

来自分类Dev

如何在表格中将文本框彼此对齐

来自分类Dev

如何在GridView中将列与文本框进行比较

来自分类Dev

如何在HTML中将文本框与屏幕中心对齐?

来自分类Dev

如何在 VBScript 中将文本框写入 .txt?

来自分类Dev

如何在Scala中将功能应用于选项列表?

来自分类Dev

如何在Python中将self应用于方法参数

来自分类Dev

如何在OpenCV中将转换矩阵应用于点?

来自分类常见问题

如何在Javascript中将条件应用于forEach循环?

来自分类Dev

如何在MySQL中将位掩码应用于整数?

来自分类Dev

如何在GitBook中将样式应用于代码块?

来自分类Dev

如何在JavaScript中将重力应用于弹跳球-

来自分类Dev

如何在Android中将波纹效果应用于BottomSheets

来自分类Dev

如何在Swift中将阴影应用于UITextView?

来自分类Dev

如何在tidyverse中将函数应用于名称

来自分类Dev

如何在Javascript中将查找应用于数组?

Related 相关文章

  1. 1

    如何在不指定每个文本框的情况下将相同功能应用于控制器中的所有文本框

  2. 2

    将 DropShadowEffect 应用于 WPF 文本框文本

  3. 3

    将vbCrLf应用于文本框的内容

  4. 4

    如何将JavaScript应用于具有不同ID的文本框数组?

  5. 5

    如何将边框应用于焦点上的文本框?

  6. 6

    如何将主题应用于从文本框继承的Custome控件

  7. 7

    文本框样式未应用于 ItemsPresenter 文本框

  8. 8

    如何在XAML中将按钮绑定到滑块和文本框

  9. 9

    如何在R中将创建列的函数应用于数据框

  10. 10

    如何在Python中将方法/函数应用于数据框

  11. 11

    如何在熊猫数据框中将不同的条件应用于不同月份?

  12. 12

    如何在Swift中将样式应用于所有文本字段

  13. 13

    如何在SwiftUI中将strikethrough()应用于点击的foreach文本项?

  14. 14

    如何在Blazor中将焦点设置为文本框

  15. 15

    如何在表格中将文本框彼此对齐

  16. 16

    如何在GridView中将列与文本框进行比较

  17. 17

    如何在HTML中将文本框与屏幕中心对齐?

  18. 18

    如何在 VBScript 中将文本框写入 .txt?

  19. 19

    如何在Scala中将功能应用于选项列表?

  20. 20

    如何在Python中将self应用于方法参数

  21. 21

    如何在OpenCV中将转换矩阵应用于点?

  22. 22

    如何在Javascript中将条件应用于forEach循环?

  23. 23

    如何在MySQL中将位掩码应用于整数?

  24. 24

    如何在GitBook中将样式应用于代码块?

  25. 25

    如何在JavaScript中将重力应用于弹跳球-

  26. 26

    如何在Android中将波纹效果应用于BottomSheets

  27. 27

    如何在Swift中将阴影应用于UITextView?

  28. 28

    如何在tidyverse中将函数应用于名称

  29. 29

    如何在Javascript中将查找应用于数组?

热门标签

归档