我想爲網格定義一種樣式,我想根據不同的狀態更改網格的邊框厚度。就像在鼠標/指針結束,我想使厚度爲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相同。 –