這應該是相當簡單的 - 首先添加一個像邊框這樣的疊加層和默認隱藏的「購買」按鈕。只要確保覆蓋是根的最後一個孩子,所以它總是會出現在最前面:
<Grid x:Name="LayoutRoot">
<!-- Main content here -->
<Border x:Name="overlay" RowSpan="10" ColumnSpan="10"
Opacity="0.5" Background="#666"
Visibility="Collapsed" />
<Button x:Name="btnPurchase"
Content="Purchase"
HorizontalAlignment="Center" VerticalAlignment="Center"
Command="{Binding StartPurchaseCommand}"
Visibility="Collapsed" />
</Grid>
現在添加了「購買」可視狀態來顯示覆蓋+按鈕:
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="PurchaseStates">
<VisualState x:Name="TrialState" />
<VisualState x:Name="PurchaseRequired">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="overlay" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnPurchase" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
然後,只要試用期結束,只需在啓動時調用VisualStateManager.GoToState(this, "PurchaseRequired", true)
即可。
謝謝。我嘗試在我的OnNavigatedTo事件中添加VisualStateManager.GoToState(this,「PurchaseRequired」,true);以查看會發生什麼,但是我得到一個'InvalidOperationException'。我計劃在15天之後說出類似的內容。你會爲此推薦什麼? – Matthew
@Matthew我不確定交易是什麼 - 如果狀態是在頁面的根元素下定義的,那麼這個工作應該可行。也許通過綁定到VM屬性來設置可見性會更容易。 – McGarnagle
嗯,我不確定。在Windows Phone 8中使用'Popup'控件怎麼樣?有沒有辦法顯示彈出窗口並將屏幕的其餘部分調暗並阻止用戶界面進行任何用戶交互? – Matthew