[英]What is the proper way to implement a REST API for Search by multiple criteria?
[英]What is the proper way to implement VisualStates for multiple VisualStateGroups?
這個問題是我之前的問題以及有關VisualStates
在WPF中如何工作的相關問題的后續。
目前,我的理解是在不同的VisualStateGroups
設置相同屬性的動畫可能會導致問題(請參閱鏈接的問題)。
為了解決這些問題,需要利用漏洞。 (也許漏洞不是正確的術語,但看來解決方案不是WPF設計人員想要的。)
VisualStateGroups
設置同一個屬性的動畫而不引起不良副作用的正確方法是什么。 如果不可能,那么為控件實現相同視覺行為的正確途徑是什么? 我可以在MSDN上找到一些相關文檔:
每個組的控件始終處於完全一種狀態。 例如,即使鼠標指針不在按鈕上,按鈕也可以具有焦點,因此處於焦點狀態的按鈕可以處於MouseOver,Pressed或Normal狀態。
這引出我第二個問題...
VisualStates
處於活動狀態時才會發生的視覺行為? 以ToggleButton
為例:
在上面的示例中,您將如何呈現第三種視覺行為?
對於問題的第一部分,例如,您希望每個狀態與每個對象與不同的單獨對象進行交互,而不是與每個VisualState相同。
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="DisabledState"
Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Checked">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="CheckedState"
Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<!-- Each state interacts with its own object in your ControlTemplate ideally -->
<Border x:Name="CheckedState" Visibility="Collapsed"
Background="Green"/>
<Border x:Name="DisabledState" Visibility="Collapsed"
Background="White" Opacity=".5"/>
而不是共享一個對象的屬性更改,例如;
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimation d:IsOptimized="True"
Duration="0"
Storyboard.TargetName="Background"
Storyboard.TargetProperty="(SolidColorBrush.Color)"
To="White" />
</Storyboard>
</VisualState>
<VisualState x:Name="Checked">
<Storyboard>
<ColorAnimation d:IsOptimized="True"
Duration="0"
Storyboard.TargetName="Background"
Storyboard.TargetProperty="(SolidColorBrush.Color)"
To="Green" />
</Storyboard>
</VisualState>
<Border x:Name="Background" Background="Blue"/>
根據您的第二個問題, VisualState
將充當布爾,因為它處於或不處於該狀態。 要共享狀態聲明,您必須在某個地方或某個地方使用MultiTrigger或轉換器來增加一些技巧。
希望這可以幫助。 干杯
編輯添加:
因此,您還可以使用VisualTransition
來使用;
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition From="Normal"
GeneratedDuration="0:0:0.2"
To="Checked">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseIn" Exponent="7" />
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition From="Checked"
GeneratedDuration="0:0:0.2"
To="Normal">
<VisualTransition.GeneratedEasingFunction>
<CircleEase EasingMode="EaseIn" />
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!-- etc, etc, etc -->
這樣您就可以玩不同的游戲,產生的持續時間等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.