mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 19:26:39 +02:00
CmdPal: Update visual style of details panel elements (#42102)
## Summary of the Pull Request This PR updates the details panel formatting: - Hides the empty text block used as a separator when the key is empty. - Makes separators more subtle by adjusting the brush. - Reverses the typographical hierarchy of detail key/value items, making the value dominant and the key more subtle to help users focus on the content. - Defines new detail text styles derived from the base WinUI typographical styles. | Before | After | |--------|-------| | <img width="711" height="1795" alt="image" src="https://github.com/user-attachments/assets/9155ec88-639a-44c1-a70d-edcd4107945e" /> | <img width="743" height="1667" alt="image" src="https://github.com/user-attachments/assets/9d1dc432-82da-4183-b347-74a2f3b96c53" /> | <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #42099 - [x] Closes: #41664 - [ ] **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:
@@ -2,9 +2,17 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
|
||||||
namespace Microsoft.CmdPal.UI.Helpers;
|
namespace Microsoft.CmdPal.UI.Helpers;
|
||||||
|
|
||||||
internal static class BindTransformers
|
internal static class BindTransformers
|
||||||
{
|
{
|
||||||
public static bool Negate(bool value) => !value;
|
public static bool Negate(bool value) => !value;
|
||||||
|
|
||||||
|
public static Visibility EmptyToCollapsed(string? input)
|
||||||
|
=> string.IsNullOrEmpty(input) ? Visibility.Collapsed : Visibility.Visible;
|
||||||
|
|
||||||
|
public static Visibility EmptyOrWhitespaceToCollapsed(string? input)
|
||||||
|
=> string.IsNullOrWhiteSpace(input) ? Visibility.Collapsed : Visibility.Visible;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,31 @@
|
|||||||
FalseValue="Visible"
|
FalseValue="Visible"
|
||||||
TrueValue="Collapsed" />
|
TrueValue="Collapsed" />
|
||||||
|
|
||||||
|
<Style
|
||||||
|
x:Key="DetailKeyTextBlockStyle"
|
||||||
|
BasedOn="{StaticResource CaptionTextBlockStyle}"
|
||||||
|
TargetType="TextBlock">
|
||||||
|
<Setter Property="IsTextSelectionEnabled" Value="True" />
|
||||||
|
<Setter Property="TextWrapping" Value="WrapWholeWords" />
|
||||||
|
<Setter Property="Foreground" Value="{ThemeResource TextFillColorSecondaryBrush}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style
|
||||||
|
x:Key="SeparatorKeyTextBlockStyle"
|
||||||
|
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
|
||||||
|
TargetType="TextBlock">
|
||||||
|
<Setter Property="IsTextSelectionEnabled" Value="True" />
|
||||||
|
<Setter Property="TextWrapping" Value="WrapWholeWords" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style
|
||||||
|
x:Key="DetailValueTextBlockStyle"
|
||||||
|
BasedOn="{StaticResource BodyTextBlockStyle}"
|
||||||
|
TargetType="TextBlock">
|
||||||
|
<Setter Property="IsTextSelectionEnabled" Value="True" />
|
||||||
|
<Setter Property="TextWrapping" Value="WrapWholeWords" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
<DataTemplate x:Key="TagTemplate" x:DataType="coreViewModels:TagViewModel">
|
<DataTemplate x:Key="TagTemplate" x:DataType="coreViewModels:TagViewModel">
|
||||||
<cpcontrols:Tag
|
<cpcontrols:Tag
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
@@ -68,7 +93,7 @@
|
|||||||
Margin="0,3,8,0"
|
Margin="0,3,8,0"
|
||||||
SourceKey="{x:Bind Icon, Mode=OneWay}"
|
SourceKey="{x:Bind Icon, Mode=OneWay}"
|
||||||
SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested}" />
|
SourceRequested="{x:Bind help:IconCacheProvider.SourceRequested}" />
|
||||||
<TextBlock Text="{x:Bind Name}" />
|
<TextBlock Style="{StaticResource BodyTextBlockStyle}" Text="{x:Bind Name}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -76,20 +101,13 @@
|
|||||||
|
|
||||||
<DataTemplate x:Key="DetailsLinkTemplate" x:DataType="coreViewModels:DetailsLinkViewModel">
|
<DataTemplate x:Key="DetailsLinkTemplate" x:DataType="coreViewModels:DetailsLinkViewModel">
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
|
<TextBlock Style="{StaticResource DetailKeyTextBlockStyle}" Text="{x:Bind Key, Mode=OneWay}" />
|
||||||
<TextBlock
|
<TextBlock
|
||||||
IsTextSelectionEnabled="True"
|
Style="{StaticResource DetailValueTextBlockStyle}"
|
||||||
Text="{x:Bind Key, Mode=OneWay}"
|
|
||||||
TextWrapping="WrapWholeWords" />
|
|
||||||
<TextBlock
|
|
||||||
FontSize="12"
|
|
||||||
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
|
|
||||||
IsTextSelectionEnabled="True"
|
|
||||||
Text="{x:Bind Text, Mode=OneWay}"
|
Text="{x:Bind Text, Mode=OneWay}"
|
||||||
TextWrapping="WrapWholeWords"
|
|
||||||
Visibility="{x:Bind IsText, Mode=OneWay}" />
|
Visibility="{x:Bind IsText, Mode=OneWay}" />
|
||||||
<HyperlinkButton
|
<HyperlinkButton
|
||||||
Padding="0"
|
Padding="0"
|
||||||
FontSize="12"
|
|
||||||
NavigateUri="{x:Bind Link, Mode=OneWay}"
|
NavigateUri="{x:Bind Link, Mode=OneWay}"
|
||||||
Visibility="{x:Bind IsLink, Mode=OneWay}">
|
Visibility="{x:Bind IsLink, Mode=OneWay}">
|
||||||
<TextBlock Text="{x:Bind Text, Mode=OneWay}" TextWrapping="Wrap" />
|
<TextBlock Text="{x:Bind Text, Mode=OneWay}" TextWrapping="Wrap" />
|
||||||
@@ -98,10 +116,7 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="DetailsCommandsTemplate" x:DataType="coreViewModels:DetailsCommandsViewModel">
|
<DataTemplate x:Key="DetailsCommandsTemplate" x:DataType="coreViewModels:DetailsCommandsViewModel">
|
||||||
<StackPanel Orientation="Vertical" Spacing="4">
|
<StackPanel Orientation="Vertical" Spacing="4">
|
||||||
<TextBlock
|
<TextBlock Style="{StaticResource DetailKeyTextBlockStyle}" Text="{x:Bind Key, Mode=OneWay}" />
|
||||||
IsTextSelectionEnabled="True"
|
|
||||||
Text="{x:Bind Key, Mode=OneWay}"
|
|
||||||
TextWrapping="WrapWholeWords" />
|
|
||||||
<ItemsControl
|
<ItemsControl
|
||||||
ItemTemplate="{StaticResource CommandTemplate}"
|
ItemTemplate="{StaticResource CommandTemplate}"
|
||||||
ItemsSource="{x:Bind Commands, Mode=OneWay}"
|
ItemsSource="{x:Bind Commands, Mode=OneWay}"
|
||||||
@@ -111,24 +126,20 @@
|
|||||||
<DataTemplate x:Key="DetailsSeparatorTemplate" x:DataType="coreViewModels:DetailsSeparatorViewModel">
|
<DataTemplate x:Key="DetailsSeparatorTemplate" x:DataType="coreViewModels:DetailsSeparatorViewModel">
|
||||||
<StackPanel Margin="0,8,8,0" Orientation="Vertical">
|
<StackPanel Margin="0,8,8,0" Orientation="Vertical">
|
||||||
<Border
|
<Border
|
||||||
Margin="8,0,0,0"
|
Margin="0,0,0,0"
|
||||||
BorderBrush="{ThemeResource TextFillColorSecondaryBrush}"
|
BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}"
|
||||||
BorderThickness="0,0,0,2">
|
BorderThickness="0,0,0,2">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Margin="-8,0,0,8"
|
Margin="0,0,0,0"
|
||||||
FontWeight="SemiBold"
|
Style="{StaticResource SeparatorKeyTextBlockStyle}"
|
||||||
IsTextSelectionEnabled="True"
|
|
||||||
Text="{x:Bind Key, Mode=OneWay}"
|
Text="{x:Bind Key, Mode=OneWay}"
|
||||||
TextWrapping="WrapWholeWords" />
|
Visibility="{x:Bind help:BindTransformers.EmptyOrWhitespaceToCollapsed(Key), FallbackValue=Collapsed}" />
|
||||||
</Border>
|
</Border>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate x:Key="DetailsTagsTemplate" x:DataType="coreViewModels:DetailsTagsViewModel">
|
<DataTemplate x:Key="DetailsTagsTemplate" x:DataType="coreViewModels:DetailsTagsViewModel">
|
||||||
<StackPanel Orientation="Vertical" Spacing="4">
|
<StackPanel Orientation="Vertical" Spacing="4">
|
||||||
<TextBlock
|
<TextBlock Style="{StaticResource DetailKeyTextBlockStyle}" Text="{x:Bind Key, Mode=OneWay}" />
|
||||||
IsTextSelectionEnabled="True"
|
|
||||||
Text="{x:Bind Key, Mode=OneWay}"
|
|
||||||
TextWrapping="WrapWholeWords" />
|
|
||||||
<ItemsControl
|
<ItemsControl
|
||||||
ItemTemplate="{StaticResource TagTemplate}"
|
ItemTemplate="{StaticResource TagTemplate}"
|
||||||
ItemsSource="{x:Bind Tags, Mode=OneWay}"
|
ItemsSource="{x:Bind Tags, Mode=OneWay}"
|
||||||
|
|||||||
Reference in New Issue
Block a user