1
我定義的控件模板的按鈕的VisualState:如何根據某些條件禁用/啓用VisualState? (地鐵)
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
...
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
...
<VisualState x:Name="PointerOver">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="c1" Storyboard.TargetProperty="Opacity" To="0.7"/>
</Storyboard>
</VisualState>
...
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
</ControlTemplate>
但這種影響(改變不透明度時,鼠標懸停)應根據視圖模型條件下啓用/禁用,所以我怎麼辦用XAML?
我試着爲DoubleAnimation的To值創建一個綁定,它不起作用,因爲Storyboard被凍結。我也在想像一個模板選擇器,但VisualState Manager沒有這樣的事情。
感謝您的回覆。但是當你說「更新可視狀態」時,你的意思是「切換到另一個可視狀態」或「更改VisualStateManager的邏輯樹」。對於前者,它不起作用,因爲可以通過鼠標操作觸發「PointerOver」狀態,所以即使我手動切換到另一個狀態,「PointerOver」狀態仍然存在,但鼠標仍然會被觸發除非我可以「禁用」它。對於後者,我需要先找到C#中的VisualState對象,但它看起來不在可視化樹中。 (在Button上找不到GetDescendants()) – 2013-02-13 00:28:07
我的意思是「切換到另一個視覺狀態」。如果'PointerOver'被按鈕的邏輯覆蓋 - 清除它的'Storyboard'並在一個新的'VisualStateGroup'中添加你自己定製的'CustomPointerOver'狀態,它可以做到你想要的那個按鈕,所以它不會使用或覆蓋它。我不認爲你需要在運行時修改'VisualStateGroup'的設置,但GetDescendants()只適用於可視化樹元素('UIElement's),而'VisualStateManager'不是。 – 2013-02-13 01:27:04
謝謝。有效!從來沒有想過我可以在同一個VisualStateGroup中使用混合狀態(Button知道並且不知道)。我只需要處理PointerEntered事件並根據條件決定是否轉到我的CustomPointerOver狀態。 – 2013-02-13 02:23:32