- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直想知道是否有更简单的方法来仅更改一个属性然后在 Windows Phone 8 中重新设置整个 ControlTemplate 的样式。
我最近发现自己需要更改 PasswordBox 的背景(选择/键入时显示的背景)而不更改其他任何内容。我知道有重新创建整个 ControlTemplate 的方法(因为它对我来说太过分了,我有点迷失了——我是个菜鸟)。
其他(最好更简单)选项是如何做到的?如果是,是哪个?
我问的原因是因为我正在创建需要在 Android、iOS 和 Windows Phone 上看起来几乎相同的应用程序(android 和 iOS 应用程序是由其他人完成的,我正在开发 WP 应用程序和给出了设计)。
无论用户在手机上选择什么主题,应用程序都需要看起来相同。
并且由于在写入 TextBox/PasswordBox 时文本是白色和深色主题,因此背景也更改为白色 - 结果是您看不到您正在输入的内容。
更改“Foreground-when-typing”或“background-when-typing”更容易吗?如何在不重新创建整个 ControlTemplate 的情况下做到这一点?
最佳答案
做到这一点的方法是使用重新模板化和隐式样式。
不要害怕。这很简单,看,这就是您所追求的:
<phone:PhoneApplicationPage.Resources>
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
<Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/>
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="White"/>
<Setter Property="SelectionBackground" Value="White"/>
<Setter Property="SelectionForeground" Value="Black"/>
<Setter Property="CaretBrush" Value="White"/>
<Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver"/>
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="MainBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="MainBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="ReadOnly">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="MainBorder">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="ReadonlyBorder">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ReadonlyBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ReadonlyBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxReadOnlyBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<!--<VisualState x:Name="Focused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="MainBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxEditBackgroundBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="MainBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxEditBorderBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>-->
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="MainBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Margin="{StaticResource PhoneTouchTargetOverhang}"/>
<Border x:Name="ReadonlyBorder" BorderBrush="{StaticResource PhoneDisabledBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}" Visibility="Collapsed"/>
<Border BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}">
<ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Stretch" Margin="{StaticResource PhoneTextBoxInnerMargin}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
现在,无论何时在该页面上使用 TextBox,它总是黑底白字。 (或选择时反转。)
这个:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<TextBox Text="something" />
<TextBox />
</StackPanel>
</Grid>
创建这个:
不幸的是,您无法使用强调色对选区的句柄做任何事情。
我没有传递禁用或只读状态,但它们应该很容易更改。
关于xaml - 在 XAML 中设置 TextBox/PasswordBox 的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953502/
我有以下样式定义:
这似乎是 Windows Phone 中的明显疏忽。 控件不允许指定 InputScope . 我需要显示 PasswordBox作为自定义密码输入屏幕的一部分(例如图像和按钮),并显示数字键盘以仅允
我在这里找到了一些关于这个问题的信息,但不知何故我并没有真正得到它;-) 从我所读到的内容来看,由于安全原因,PasswordBox 的密码不能绑定(bind)到属性,即保留普通密码在内存中。 我的模
我一直很欣赏 Josh Smith 建立他的 sample application 的方式。 . 而且我还尝试模拟他的应用程序的 ViewModels 实现 IDataErrorInfo 属性的方式,
我有一个需要让用户创建密码的应用程序。因此,在输入密码时需要测试各种规则。 这些规则很典型——值必须有一定的长度,有一个大,一个小,包括一些特殊字符等。 但是,由于这是一个使用 PasswordBox
我有一个密码框,我想获取输入数据以检查验证。 我的密码箱c#代码 public void textBox2_TextInput(object sender, TextCompositionEven
我正在使用最新的 MahApps WPF 工具包,但在将我自己的样式应用到它的控件(准确地说是 PasswordBox)上时遇到了一些麻烦。 我在一个单独的 .xaml 文件中定义了样式,该文件包含在
我不知道有人知道如何在 PasswordBox 中显示密码。已阅读过您可以将文本框绑定(bind)到密码框,但这不是另一种方法吗? 最佳答案 如果您希望密码可见,您应该使用文本框。密码框的唯一功能是屏
所以我有一个密码框: 但是我也有一个明确的功能,其中包含: Password = null 我遇到的问题是 PlaceholderText 没有恢复,而是该框留空。 这是一个错误还是我遗漏了什么?
我正在尝试对 PasswordBox 进行验证。为了进行验证,我遵循了这个 link ,显示了如何在 TextBox 上进行验证。 问题来自 PasswordBoxes。因为它的 Password 出
最近我已经问了几个关于 PasswordBox 的问题,但我的问题的核心是,我需要一种极其安全的方式来将非常敏感的信息输入到我的 .Net 应用程序中。 开箱即用,WPF PasswordBox 是获
为什么我无法将焦点设置在我的 PasswordBox 控件上? C#: public Login() { InitializeComponent(); _password.Focus();
我有一个密码框。 PasswordBox输入完成后如何获取输入值? 最佳答案 您可以从 Password 属性中获取它。 关于C# 如何从 PasswordBox 中获取文本值?,我们在Stack O
创建包含 PasswordBox 的 WPF 应用程序时控制,我试图设置PasswordChar显示“ 使用这段代码时,报如下错误: Error 1 The value " 您可以在这篇 MSDN 文
我这里有一些概念问题。我知道如何选择 TextBox 或 PasswordBox 中的所有文本。通过 GotKeyboardFocus 和 PreviewMouseLeftButtonDown 事件,
我只是偶然发现 WPF PasswordBoxes 的 Password 属性出于安全原因 是不可绑定(bind)的,这使得使用它们相当在 MVVM 上下文中很麻烦。类似 https://stacko
我正在尝试显示 PasswordBox 的 Validation.ErrorTemplate。但是,它没有显示。在同一表单上,我有一个用户名 TextBox 并且正确显示了 ErrorTemplate
我有一个 UWP 应用程序,它使用 PasswordBox 控件进行模糊文本输入。密码的有效字符因实例而异,并且在运行时为 ViewModel 层所知。我希望能够在用户键入无效字符时过滤掉它们。这样做
我读到 WPF PasswordBox 中的密码没有用于绑定(bind)密码的依赖属性出于安全原因。尽管如此,还是有ways to bind it anyway . MVVM 模式的用户需要这种数据绑
我有一个现有的 SecureString我想放入 PasswordBox 不泄露 .Password。这可以做到吗?例如: tbPassword.SecurePassword = DecryptStr
我是一名优秀的程序员,十分优秀!