簡體   English   中英

如何通過C#中的代碼更改VisualState Setter屬性?

[英]How to change VisualState Setter property via code in C#?

我的UWP應用程序中具有以下VisualState Setter屬性。

 <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup">
            <VisualState x:Name="Desktop">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="800" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="DesktopAds.Visibility" Value="Visible" />
                    <Setter Target="DesktopAds.(Grid.Row)" Value="0" />
                    <Setter Target="DesktopAds.(Grid.Column)" Value="4" />
                    <Setter Target="DesktopAds.(Grid.ColumnSpan)" Value="1" />
                    <Setter Target="MainScrollViewer.(Grid.Row)" Value="0" />
                    <Setter Target="MainScrollViewer.(Grid.Column)" Value="2" />
                    <Setter Target="MediaControl.Height" Value="600" />

                    <Setter Target="MobileAds.Visibility" Value="Collapsed" />
                    <Setter Target="MainScrollViewer.(Grid.ColumnSpan)" Value="1" />

                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="Phone">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="DesktopAds.Visibility" Value="Collapsed" />

                    <Setter Target="MediaControl.Height" Value="400" />

                    <Setter Target="DesktopAds.(Grid.Row)" Value="1" />
                    <Setter Target="DesktopAds.(Grid.Column)" Value="0" />
                    <Setter Target="DesktopAds.(Grid.ColumnSpan)" Value="3" />

                    <Setter Target="MobileAds.Visibility" Value="Visible" />
                    <Setter Target="MainScrollViewer.(Grid.Row)" Value="0" />
                    <Setter Target="MainScrollViewer.(Grid.Column)" Value="0" />
                    <Setter Target="MainScrollViewer.(Grid.ColumnSpan)" Value="5" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

我想擁有我的應用程序的試用版和付費版,其中試用版帶有廣告,付費版沒有廣告。 我正在使用LicenseInformation.IsTrial屬性來確定該應用程序是試用版還是付費版本,以及何時加載該應用程序,因此我將DesktopAds和MobileAds的可見性折疊了。 但是由於有了AdaptiveTriggers,DesktopAds和MobileAds的可見性已更改為可見,我仍然可以看到廣告。 如何使可見性在我的付費版應用中永久崩潰?

您真正想做的是使用可視狀態組。 像這樣:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="LayoutVisualStateGroup">
        <VisualState x:Name="Desktop" />
        <VisualState x:Name="Phone" />        
    </VisualStateGroup>
    <VisualStateGroup x:Name="AdvertVisualStateGroup">
        <VisualState x:Name="ShowAds" />
        <VisualState x:Name="HideAds" />        
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

然后,讓自適應觸發器處理布局,並讓您的代碼隱藏處理隱藏和顯示廣告。 因為您將狀態分為幾組,所以它們是互斥的,可以獨立設置。 有點像如何同時pressedenabled按鈕。 他們與團體一起做。 順便說一下,這是一種非常典型的方法。

祝你好運!

以編程方式更改視覺狀態:

VisualStateManager.GoToState(yourPageHere, "Phone", useTransitions: false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM