我想为网格定义一种样式,我想根据不同的状态更改网格的边框厚度。就像在鼠标/指针结束,我想使厚度为1,并在正常状态(当点不在网格上方)时,我希望它是0.5 另外,我的网格有一个文本框,所以当文本框处于焦点时正在编辑),网格边框应设置为1(如指针悬停状态)。网格的视觉状态
这里是我的代码:
<Grid>
<TextBox
BorderThickness="0"
Height="40"
Text="Text" />
</Grid>
我想为网格定义一种样式,我想根据不同的状态更改网格的边框厚度。就像在鼠标/指针结束,我想使厚度为1,并在正常状态(当点不在网格上方)时,我希望它是0.5 另外,我的网格有一个文本框,所以当文本框处于焦点时正在编辑),网格边框应设置为1(如指针悬停状态)。网格的视觉状态
这里是我的代码:
<Grid>
<TextBox
BorderThickness="0"
Height="40"
Text="Text" />
</Grid>
您可以使用样式触发器在鼠标悬停改变厚度。对于文本框获取焦点,您可以使用事件触发器。
如果您使用的是UWP,则可以使用Xaml Interactivity库来触发此操作。举个例子:
<Page>
<Page.Resources>
<Storyboard x:Name="HideTextBoxAnimation">
<DoubleAnimation
Storyboard.TargetName="TxtBx"
Storyboard.TargetProperty="Opacity"
From="1"
To="0"
Duration="0:0:0.2" />
</Storyboard>
</Page.Resources>
<Grid>
<i:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<media:ControlStoryboardAction Storyboard="{StaticResource HideTextBoxAnimation}" />
</core:EventTriggerBehavior>
</i:Interaction.Behaviors>
<TextBox x:Name="TxtBx" Opacity="1"
BorderThickness="0"
Height="40"
Text="Text" />
</Grid>
</Page>
这不是你正在等待的确切故事板,但我想你会得到。只需更改EventTriggerBehavior的EventName和故事板以满足您的需求。
在你需要这些页面的顶部:
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
xmlns:media="using:Microsoft.Xaml.Interactions.Media"
希望这有助于。
这绝对可以在UWP中完成。他们不让你使用风格触发器(为什么,我不知道),而是你必须使用VisualState
s和Storyboard
s。它们比WPF触发器,恕我直言,更加混乱和复杂,但它们确实有效,这就是所有UWP默认样式的工作原理。
如果你还没有,你应该检查出default UWP styles and templates。 Button
是good place to start。你可以看到他们如何改变Button
的视觉属性以回应不同的VisualState
。不幸的是 - 这就是Triggers会派上用场的地方 - 输入事件和VisualState
之间的关系都是用代码完成的,所以如果你使用的控件的内置VisualState
不适合你需要,您需要在代码隐藏中手动设置它们。不过,您仍然可以使用不同的Style
作为同一控件,这似乎是您的主要目标。
Blend对于像这样的东西也非常有用,因为您可以很容易地测试出所有的Storyboard
。
希望这会有所帮助。顺便说一下,大约一年前,我放弃了Windows Store/UWP,回到了直接WPF,并没有回头。随着桌面应用程序转换器终于在途中,我没有看到任何理由使用UWP,除非你想要在XBox上,但这是你的呼叫。 :)
此链接将有助于你实现这一目标。 http://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/ –
感谢您的链接。实际上UWP中没有Style.Triggers。另外,我想如何更改网格的边框而不是文本框的边框。我可以以某种方式将目标元素绑定到要更改边框厚度属性的位置吗? – tavier
我已经根据WPF解释过。我认为这应该与UWP相同。 –