【问题标题】:Resizing the TimePicker in Universal Windows Platform在通用 Windows 平台中调整 TimePicker 的大小
【发布时间】:2016-08-13 23:04:49
【问题描述】:

当 MaxWidth 或 Width 等属性发生更改时,UWP 中的 TimePicker 控件不会重新调整大小,是否需要设置其他属性,或者我只需要找到解决方法?

【问题讨论】:

    标签: win-universal-app uwp-xaml


    【解决方案1】:

    经过一番调查,您似乎只能使用“Padding”属性更改 TimePicker 的大小。

    【讨论】:

      【解决方案2】:

      您需要更改 TimePicker 的默认样式。例如,请在您的 Page.Ressources 中添加以下样式。我更改的唯一值是将 MaxWidth 更改为 800 - 默认值为 456。然后,您应该能够使用 Width 属性最大化您的控件。

      <Page.Resources>
          <!-- Default style for Windows.UI.Xaml.Controls.TimePicker -->
          <Style TargetType="TimePicker">
              <Setter Property="IsTabStop" Value="False" />
              <Setter Property="MinWidth" Value="242" />
              <Setter Property="MaxWidth" Value="800" />
              <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
              <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
              <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
              <Setter Property="HorizontalAlignment" Value="Left" />
              <Setter Property="VerticalAlignment" Value="Center"/>
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate TargetType="TimePicker">
                          <StackPanel x:Name="LayoutRoot" Margin="{TemplateBinding Padding}">
                              <StackPanel.Resources>
                                  <Style x:Key="TimePickerFlyoutButtonStyle" TargetType="Button">
                                      <Setter Property="UseSystemFocusVisuals" Value="False" />
                                      <Setter Property="Template">
                                          <Setter.Value>
                                              <ControlTemplate TargetType="Button">
                                                  <Grid Background="{TemplateBinding Background}">
                                                      <VisualStateManager.VisualStateGroups>
                                                          <VisualStateGroup x:Name="CommonStates">
                                                              <VisualState x:Name="Normal" />
                                                              <VisualState x:Name="PointerOver">
                                                                  <Storyboard>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="BorderBrush">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Background">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlPageBackgroundAltMediumBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Foreground">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                  </Storyboard>
                                                              </VisualState>
                                                              <VisualState x:Name="Pressed">
                                                                  <Storyboard>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Background">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="BorderBrush">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Foreground">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                  </Storyboard>
                                                              </VisualState>
                                                              <VisualState x:Name="Disabled">
                                                                  <Storyboard>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Background">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="BorderBrush">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Foreground">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                  </Storyboard>
                                                              </VisualState>
                                                          </VisualStateGroup>
                                                          <VisualStateGroup x:Name="FocusStates">
                                                              <VisualState x:Name="Focused">
                                                                  <Storyboard>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Background">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListAccentLowBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                                     Storyboard.TargetProperty="Foreground">
                                                                          <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
                                                                      </ObjectAnimationUsingKeyFrames>
                                                                  </Storyboard>
                                                              </VisualState>
                                                              <VisualState x:Name="Unfocused" />
                                                              <VisualState x:Name="PointerFocused" />
                                                          </VisualStateGroup>
                                                      </VisualStateManager.VisualStateGroups>
                                                      <ContentPresenter x:Name="ContentPresenter"
                                                                    BorderBrush="{ThemeResource SystemControlForegroundBaseMediumLowBrush}"
                                                                    Background="{ThemeResource SystemControlBackgroundAltMediumLowBrush}"
                                                                    BorderThickness="2"
                                                                    Content="{TemplateBinding Content}"
                                                                    Foreground="{TemplateBinding Foreground}"
                                                                    HorizontalContentAlignment="Stretch"
                                                                    VerticalContentAlignment="Stretch"
                                                                    AutomationProperties.AccessibilityView="Raw"/>
                                                  </Grid>
                                              </ControlTemplate>
                                          </Setter.Value>
                                      </Setter>
                                  </Style>
                              </StackPanel.Resources>
                              <VisualStateManager.VisualStateGroups>
                                  <VisualStateGroup x:Name="CommonStates">
                                      <VisualState x:Name="Normal" />
                                      <VisualState x:Name="Disabled">
                                          <Storyboard>
                                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HeaderContentPresenter"
                                                                         Storyboard.TargetProperty="Foreground">
                                                  <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                                              </ObjectAnimationUsingKeyFrames>
                                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FirstColumnDivider"
                                                                         Storyboard.TargetProperty="Fill">
                                                  <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                                              </ObjectAnimationUsingKeyFrames>
                                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SecondColumnDivider"
                                                                         Storyboard.TargetProperty="Fill">
                                                  <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseLowBrush}" />
                                              </ObjectAnimationUsingKeyFrames>
                                          </Storyboard>
                                      </VisualState>
                                  </VisualStateGroup>
                              </VisualStateManager.VisualStateGroups>
                              <ContentPresenter x:Name="HeaderContentPresenter"
                                            x:DeferLoadStrategy="Lazy"
                                            Visibility="Collapsed"
                                            Content="{TemplateBinding Header}"
                                            ContentTemplate="{TemplateBinding HeaderTemplate}"
                                            Margin="0,0,0,8"
                                            Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}" 
                                            AutomationProperties.AccessibilityView="Raw" />
                              <Button x:Name="FlyoutButton"
                                  Style="{StaticResource TimePickerFlyoutButtonStyle}"
                                  Foreground="{TemplateBinding Foreground}"
                                  Background="{TemplateBinding Background}"
                                  IsEnabled="{TemplateBinding IsEnabled}"
                                  HorizontalAlignment="Stretch"
                                  HorizontalContentAlignment="Stretch">
                                  <Grid x:Name="FlyoutButtonContentGrid">
                                      <Grid.ColumnDefinitions>
                                          <ColumnDefinition Width="*" x:Name="FirstTextBlockColumn" />
                                          <ColumnDefinition Width="Auto" />
                                          <ColumnDefinition Width="*" x:Name="SecondTextBlockColumn" />
                                          <ColumnDefinition Width="Auto" />
                                          <ColumnDefinition Width="*" x:Name="ThirdTextBlockColumn" />
                                      </Grid.ColumnDefinitions>
      
                                      <Border x:Name="FirstPickerHost" Grid.Column="0">
                                          <TextBlock x:Name="HourTextBlock" TextAlignment="Center" Padding="0,3,0,5" FontFamily="{TemplateBinding FontFamily}" FontWeight="{TemplateBinding FontWeight}" FontSize="{TemplateBinding FontSize}" AutomationProperties.AccessibilityView="Raw"/>
                                      </Border>
      
                                      <Rectangle x:Name="FirstColumnDivider" Fill="{ThemeResource SystemControlForegroundBaseLowBrush}" HorizontalAlignment="Center" Width="2" Grid.Column="1" />
      
                                      <Border x:Name="SecondPickerHost" Grid.Column="2">
                                          <TextBlock x:Name="MinuteTextBlock" TextAlignment="Center" Padding="0,3,0,5" FontFamily="{TemplateBinding FontFamily}" FontWeight="{TemplateBinding FontWeight}" FontSize="{TemplateBinding FontSize}" AutomationProperties.AccessibilityView="Raw"/>
                                      </Border>
      
                                      <Rectangle x:Name="SecondColumnDivider" Fill="{ThemeResource SystemControlForegroundBaseLowBrush}" HorizontalAlignment="Center" Width="2" Grid.Column="3" />
      
                                      <Border x:Name="ThirdPickerHost" Grid.Column="4">
                                          <TextBlock x:Name="PeriodTextBlock" TextAlignment="Center" Padding="0,3,0,5" FontFamily="{TemplateBinding FontFamily}" FontWeight="{TemplateBinding FontWeight}" FontSize="{TemplateBinding FontSize}" AutomationProperties.AccessibilityView="Raw"/>
                                      </Border>
                                  </Grid>
                              </Button>
                          </StackPanel>
                      </ControlTemplate>
                  </Setter.Value>
              </Setter>
          </Style>
      </Page.Resources>
      

      【讨论】:

      • 注意。您可以在 C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10240.0\Generic 中找到所有默认样式
      【解决方案3】:

      我找到了一个非常简单的解决方法来调整 Timepicker 或 DatePicker 的大小。我只是在它周围放了一个 ViewBox 并将我想要的宽度和高度分配给 Viewbox。 Viewbox 会为您完成选取器控件的所有大小调整。简单的。完成。

      【讨论】:

      • 这是唯一可行的解​​决方案。以及非常简单的奖励积分。谢谢!
      【解决方案4】:

      根据项目的目标 SDK 有不同的解决方法。

      当项目目标为 Windows 10 1709 10.0.16299.0 时,设置 TimePicker 的 MinWidth 属性足以减小其宽度。

      当项目以 Windows 10 1803 10.0.17763.0 为目标时,替换 App.xaml 文件中的默认 TimePickerThemeMinWidth 值即可:

            <ResourceDictionary.ThemeDictionaries>
          <ResourceDictionary x:Key="Default">
            <x:Double x:Key="TimePickerThemeMinWidth">140</x:Double>
          </ResourceDictionary>
          <ResourceDictionary x:Key="Dark">
            <x:Double x:Key="TimePickerThemeMinWidth">140</x:Double>
          </ResourceDictionary>
          <ResourceDictionary x:Key="Light">
            <x:Double x:Key="TimePickerThemeMinWidth">140</x:Double>
          </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
      

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 2018-08-13
        相关资源
        最近更新 更多