2016-09-16 113 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上,但這是你的呼叫。 :)

相關問題