我有一個按鈕,其狀態根據某些標準而變化,例如,當切換按鈕打開時,更改顏色,大小,啓用/禁用。我的目標是封裝狀態,使得我們可以做這樣的事情:(?也許在XAML)如何爲UWP元素設置狀態?
if (toggleButton.IsOn) btnName.state = State1;
else btnName.state = State2;
我們定義狀態1和狀態2。
這可能與UWP有關嗎?
我有一個按鈕,其狀態根據某些標準而變化,例如,當切換按鈕打開時,更改顏色,大小,啓用/禁用。我的目標是封裝狀態,使得我們可以做這樣的事情:(?也許在XAML)如何爲UWP元素設置狀態?
if (toggleButton.IsOn) btnName.state = State1;
else btnName.state = State2;
我們定義狀態1和狀態2。
這可能與UWP有關嗎?
您可以使用VisualStateManager
調用某個控件的某個狀態。例如,如果你想手動讓ToggleSwitch
去其On
狀態,你可以寫 -
VisualStateManager.GoToState(MyToggleSwitch, "On", true);
但不這樣做。因爲這隻能設定狀態目視,底層IsOn
屬性仍然是False
。
實際上,通過將IsOn
設置爲True
,將自動應用On
狀態。這是因爲在ToggleSwitch
的default style,有一個On
狀態就像下面一堆Storyboard
S中ToggleStates
視覺狀態組內 -
<VisualState x:Name="On">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="KnobTranslateTransform"
Storyboard.TargetProperty="X"
To="24"
Duration="0" />
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobBounds"
Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="1" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterBorder"
Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="0" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOn"
Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="1" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOff"
Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="0" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
每當IsOn
設置爲True
這些Storyboard
旨意開始。這個觸發邏輯被封裝在ToggleSwitch
的代碼中。所以當你想爲自定義控件定義你自己的視覺狀態時,你需要手動將狀態屬性(例如IsChecked
,IsSelected
,IsOn
,IsEnabled
)與它們的相應狀態掛鉤,所以當其他人使用你的控件時,它們可以簡單地更新它們並期望適用正確的狀態。
_「這可能與UWP有關嗎?」_ - 當然。基於XAML的API都希望您使用MVVM風格的編程來分離您的業務邏輯和UI。根據「state」的實際情況,您需要在按鈕樣式中使用觸發器,或者根據切換按鈕狀態調整視圖模型中的屬性。鑑於你的問題含糊不清,它實際上回答太寬泛了。你需要準確地展示你在做什麼,你嘗試過什麼,以及你遇到什麼問題,使用[mcve]和清晰詳細的解釋。 –