ComboBox大小差异

时间:2018-08-02 09:41:53

标签: wpf xaml

我在应用程序设置弹出窗口中有2个ComboBox。其中一个定义了ItemTemplate,另一个则没有:

T

<StackPanel Orientation="Horizontal"
        Margin="5">
<Label Content="Accent"
       VerticalAlignment="Center"/>
<ComboBox ItemsSource="{Binding MetroAccents}" 
          SelectedItem="{Binding SelectedAccent}"
          Margin="5">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Name}"
                   Margin="0"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

image of settings flyout containing combobox's

但是,带有ItemTemplate的ComboBox的高度大于其他ComboBox的高度。通过使用“启用选择”调试工具分析控件,带有ItemTemplate的ComboBox似乎具有带有Label(在模板中定义)的TextBlock。而另一个ComboBox仅具有一个Label。有人知道为什么吗?

1 个答案:

答案 0 :(得分:2)

Label将占用更多空间,因为它是默认样式,如下所示:

<Style x:Key="LabelStyle1" TargetType="{x:Type Label}">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Top"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Label}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>  

如您所见,上面有填充。 TextBlock没有。这就是为什么要占用更多空间的原因。 请记住,Label支持带有_下划线的键绑定,也支持其他UI元素。除非需要按键绑定,否则我个人不会使用它,但是即使那样我也会使用AccessText MSDN