Элементы управления RenderSize Grid имеют различия в Windows 10 [.NET Framework 4.6.2] и Windows 7 [.NET Framework 4] - PullRequest
0 голосов
/ 05 июля 2018

У меня есть собственный стиль комбинированного списка, как показано ниже

 <Style x:Key="SmallArrowComboBoxStyle" TargetType="{x:Type ComboBox}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    <Setter Property="Background" Value="#FF1E1E1E"/>
    <Setter Property="BorderBrush" Value="#454545"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="FontSize" Value="20"/>
    <Setter Property="FontFamily"                     Value="Segoe UI,Meiryo UI" />
    <Setter Property="Background"                     Value="#1C1C1C" />
    <Setter Property="Foreground"                     Value="#FFFFFF" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <Grid x:Name="MainGrid1" SnapsToDevicePixels="true" Margin="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
                    </Grid.ColumnDefinitions>
                    <Popup x:Name="PART_Popup1" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1,0,1,1" Placement="Bottom" >
                        <Border x:Name="Shdw1" BorderBrush ="#FF4289C4" Background="#FF4289C4" BorderThickness="1" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid1}">
                            <Border x:Name="DropDownBorder" BorderThickness="0" Background="#1E1E1E">
                              <Grid>
                                <ScrollViewer x:Name="DropDownScrollViewer1" Template="{DynamicResource ScrollViewerControlTemplate1}">
                                    <Grid RenderOptions.ClearTypeHint="Enabled">
                                        <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
                                            <Rectangle x:Name="OpaqueRect1" Fill="{Binding Background, ElementName=DropDownBorder}"
                                                       Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
                                        </Canvas>
                                        <ItemsPresenter x:Name="ItemsPresenter1" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                    </Grid>
                                </ScrollViewer>
                                <Slider x:Name="CustomSliderVertical" Margin="0,0,-12,0" Maximum="100" SmallChange="1" LargeChange="10" TickPlacement="BottomRight" TickFrequency="10" 
                                    Style="{StaticResource CustomSliderStyle}" Foreground="{DynamicResource LimeBrush}" HorizontalAlignment="Right" Delay="1"
                                    Orientation="Vertical" Focusable="False" Grid.Column="0"  Grid.Row="1" Panel.ZIndex="1"/>
                              </Grid>
                            </Border>
                        </Border>
                    </Popup>
                    <ToggleButton BorderBrush="{TemplateBinding BorderBrush}"
                                  Background="{TemplateBinding Background}" Grid.ColumnSpan="2"
                                  IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
                                  Style="{StaticResource SmallArrowComboBoxToggleButton}" BorderThickness="{TemplateBinding BorderThickness}"/>
                    <ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" Name="ContentSite"
                                      ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" 
                                      ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" 
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                      IsHitTestVisible="false" Margin="{TemplateBinding Padding}" 
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    <TextBox x:Name="PART_EditableTextBoxSmall" Width="150" Height="40"
        Style="{x:Null}" 
        Template="{StaticResource ComboBoxTextBoxSmall}" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Center" 
        Margin="3,3,23,3"
        Focusable="True" 
        Background="Transparent"
        Visibility="Hidden"
        IsReadOnly="{TemplateBinding IsReadOnly}"/>

                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEditable" Value="true">
                        <Setter Property="IsTabStop" Value="false"/>
                        <Setter TargetName="PART_EditableTextBoxSmall" Property="Visibility"    Value="Visible"/>
                        <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
                        <Setter Property="Foreground" TargetName="PART_EditableTextBoxSmall" Value="#FFFFFF"/>
                    </Trigger>
                </ControlTemplate.Triggers>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я подготовил тестовое приложение со списком и применил этот стиль к полю со списком. Подготовил тестовое приложение с

.NET Framework 4 и 4.6.2

Проверено появление поля со списком, используя оба

Windows-10 (.NET Framework 4.6.2) и Windows-7 (.NET Framework 4)

Но есть разница между внешним видом Windows 10 и Windows 7.

То есть выравнивание текста поля со списком отличается.

То есть заполнение поля со списком отличается в Windows 10 и Windows 7. Но эти значения заполнения явно не установлены в коде.

  • В Windows 7 значение заполнения равно 4,3,4,3 ’
  • В Windows 10 значение отступа равно 6,3,5,3 ’

При проверке замечено, что RenderSize MainGrid1 (элемент управления сеткой из приведенного выше кода стиля) отличается в Windows 10 и Windows 7. Начиная с MSDN , RenderSize - это конечный размер рендеринга элемента.

Я сомневаюсь, почему эти RenderSize имеют разные значения в Windows 10 и Windows 7?

1 Ответ

0 голосов
/ 05 июля 2018

Windows 10 и Windows 7 используют разные темы по умолчанию для элементов управления WPF. Такие вещи, как кнопки и комбинированные списки, будут выглядеть немного иначе, если вы не переопределите шаблон по умолчанию и / или не измените необходимые свойства. Вы также можете использовать Expression Blend, чтобы «сбросить» шаблон по умолчанию, чтобы увидеть подробности.

Есть несколько других вопросов о темах, если вы немного поищете в StackOverflow. то есть: , где к найти-МОФ-классическую тему-как-XAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...