2016-09-16 119 views
0

我想为网格定义一种样式,我想根据不同的状态更改网格的边框厚度。就像在鼠标/指针结束,我想使厚度为1,并在正常状态(当点不在网格上方)时,我希望它是0.5 另外,我的网格有一个文本框,所以当文本框处于焦点时正在编辑),网格边框应设置为1(如指针悬停状态)。网格的视觉状态

这里是我的代码:

<Grid> 
    <TextBox 
     BorderThickness="0" 
     Height="40" 
     Text="Text" /> 
</Grid> 

回答

1

您可以使用样式触发器在鼠标悬停改变厚度。对于文本框获取焦点,您可以使用事件触发器。

+0

此链接将有助于你实现这一目标。 http://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/ –

+0

感谢您的链接。实际上UWP中没有Style.Triggers。另外,我想如何更改网格的边框而不是文本框的边框。我可以以某种方式将目标元素绑定到要更改边框厚度属性的位置吗? – tavier

+0

我已经根据WPF解释过。我认为这应该与UWP相同。 –

1

如果您使用的是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" 

希望这有助于。

1

这绝对可以在UWP中完成。他们不让你使用风格触发器(为什么,我不知道),而是你必须使用VisualState s和Storyboard s。它们比WPF触发器,恕我直言,更加混乱和复杂,但它们确实有效,这就是所有UWP默认样式的工作原理。

如果你还没有,你应该检查出default UWP styles and templatesButtongood place to start。你可以看到他们如何改变Button的视觉属性以回应不同的VisualState。不幸的是 - 这就是Triggers会派上用场的地方 - 输入事件和VisualState之间的关系都是用代码完成的,所以如果你使用的控件的内置VisualState不适合你需要,您需要在代码隐藏中手动设置它们。不过,您仍然可以使用不同的Style作为同一控件,这似乎是您的主要目标。

Blend对于像这样的东西也非常有用,因为您可以很容易地测试出所有的Storyboard

希望这会有所帮助。顺便说一下,大约一年前,我放弃了Windows Store/UWP,回到了直接WPF,并没有回头。随着桌面应用程序转换器终于在途中,我没有看到任何理由使用UWP,除非你想要在XBox上,但这是你的呼叫。 :)

相关问题