mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-08-29 10:09:43 +02:00
CmdPal: Ensure visual state groups set properties exclusively (#49319)
## Summary of the Pull Request This PR updates DockItemControl to ensure that visual state groups exclusively set properties and don't overlap to prevent unexpected and undeterministic result. - TextVisibilityStates and TextAlignmentStates shared SubtitleText.Visibility - TextVisibilityStates and IconVisibilityStates shared ContentGrid.ColumnSpacing <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47980 - [x] Closes: #49156 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
This commit is contained in:
@@ -152,11 +152,7 @@
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="TextVisibilityStates">
|
||||
<VisualState x:Name="TextVisible" />
|
||||
<VisualState x:Name="TitleOnly">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="SubtitleText.Visibility" Value="Collapsed" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="TitleOnly" />
|
||||
<VisualState x:Name="SubtitleOnly">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="TitleText.Visibility" Value="Collapsed" />
|
||||
@@ -165,21 +161,35 @@
|
||||
</VisualState>
|
||||
<VisualState x:Name="TextHidden">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="ContentGrid.ColumnSpacing" Value="0" />
|
||||
<Setter Target="ContentGrid.HorizontalAlignment" Value="Center" />
|
||||
<Setter Target="TextPanel.Visibility" Value="Collapsed" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="SubtitleVisibilityStates">
|
||||
<VisualState x:Name="SubtitleVisible" />
|
||||
<VisualState x:Name="SubtitleHidden">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="SubtitleText.Visibility" Value="Collapsed" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="IconVisibilityStates">
|
||||
<VisualState x:Name="IconVisible" />
|
||||
<VisualState x:Name="IconHidden">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="ContentGrid.ColumnSpacing" Value="0" />
|
||||
<Setter Target="IconPresenter.Visibility" Value="Collapsed" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="ContentSpacingStates">
|
||||
<VisualState x:Name="ContentSpacingVisible" />
|
||||
<VisualState x:Name="ContentSpacingHidden">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="ContentGrid.ColumnSpacing" Value="0" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="TextAlignmentStates">
|
||||
<VisualState x:Name="TextLeftAligned">
|
||||
<VisualState.Setters>
|
||||
@@ -199,7 +209,6 @@
|
||||
<VisualState x:Name="Compact">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="PART_RootGrid.Padding" Value="0" />
|
||||
<Setter Target="SubtitleText.Visibility" Value="Collapsed" />
|
||||
<Setter Target="TitleText.Margin" Value="0,-1,0,0" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
@@ -211,4 +220,4 @@
|
||||
</Setter>
|
||||
</Style.Setters>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</ResourceDictionary>
|
||||
|
||||
@@ -104,6 +104,7 @@ public sealed partial class DockItemControl : Control
|
||||
private void UpdateCompactState()
|
||||
{
|
||||
VisualStateManager.GoToState(this, IsCompact ? "Compact" : "DefaultLayout", true);
|
||||
UpdateSubtitleVisibilityState();
|
||||
}
|
||||
|
||||
private const string IconPresenterName = "IconPresenter";
|
||||
@@ -120,7 +121,6 @@ public sealed partial class DockItemControl : Control
|
||||
{
|
||||
control.UpdateTextVisibility();
|
||||
control.UpdateAlignment();
|
||||
control.UpdateCompactState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,6 +142,8 @@ public sealed partial class DockItemControl : Control
|
||||
private void UpdateTextVisibility()
|
||||
{
|
||||
UpdateTextVisibilityState();
|
||||
UpdateSubtitleVisibilityState();
|
||||
UpdateContentSpacingState();
|
||||
}
|
||||
|
||||
private void UpdateTextVisibilityState()
|
||||
@@ -166,6 +168,12 @@ public sealed partial class DockItemControl : Control
|
||||
VisualStateManager.GoToState(this, stateName, true);
|
||||
}
|
||||
|
||||
private void UpdateSubtitleVisibilityState()
|
||||
{
|
||||
var showSubtitle = HasSubtitle && !IsCompact;
|
||||
VisualStateManager.GoToState(this, showSubtitle ? "SubtitleVisible" : "SubtitleHidden", true);
|
||||
}
|
||||
|
||||
private void UpdateIconVisibility()
|
||||
{
|
||||
var shouldShowIcon = ShouldShowIcon();
|
||||
@@ -175,6 +183,7 @@ public sealed partial class DockItemControl : Control
|
||||
}
|
||||
|
||||
UpdateIconVisibilityState();
|
||||
UpdateContentSpacingState();
|
||||
}
|
||||
|
||||
private void UpdateIconVisibilityState()
|
||||
@@ -182,6 +191,12 @@ public sealed partial class DockItemControl : Control
|
||||
VisualStateManager.GoToState(this, ShouldShowIcon() ? "IconVisible" : "IconHidden", true);
|
||||
}
|
||||
|
||||
private void UpdateContentSpacingState()
|
||||
{
|
||||
var showSpacing = TextVisibility != Visibility.Collapsed && HasText && ShouldShowIcon();
|
||||
VisualStateManager.GoToState(this, showSpacing ? "ContentSpacingVisible" : "ContentSpacingHidden", true);
|
||||
}
|
||||
|
||||
private void UpdateAlignment()
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
|
||||
Reference in New Issue
Block a user