【问题标题】:override MahApps combobox with a custom style使用自定义样式覆盖 MahApps 组合框
【发布时间】:2016-08-15 13:26:29
【问题描述】:

问题


我在我的 WPF 应用程序中使用 MahApps,但是当我添加一个控件时,它使用 MahApps 控件。我想使用默认的组合框和样式。

有没有一种方法可以让我按照我需要的方式使用默认组合框和样式?

代码


我尝试添加Style={x:Null},但问题是我无法将我的样式Background="Transparent" 添加到该控件。

我也尝试添加自定义样式,但问题是它从控件中删除了下拉图标。

        <Style x:Key="Combobox" TargetType="{x:Type ComboBox}">
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBox}">
                        <Border x:Name="bg" BorderBrush="#858585" BorderThickness="2" CornerRadius="2">
                            <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsFocused" Value="True">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#ec122c"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

有人可以帮忙吗?

【问题讨论】:

标签: wpf combobox mahapps.metro


【解决方案1】:

您可以在定义 MahApps 样式之前保存原始样式,例如在App.xaml

<Application.Resources>
    <ResourceDictionary>
        <!-- save the default Combobox style -->
        <Style x:Key="DefaultComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}" />
        <Style x:Key="DefaultComboBoxStyle" TargetType="{x:Type ComboBox}">
            <Setter Property="ItemContainerStyle" Value="{StaticResource DefaultComboBoxItemStyle}" />
        </Style>

        <ResourceDictionary.MergedDictionaries>

            <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <!-- Accent and AppTheme setting -->
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />

        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

现在您可以继承该样式并创建另一个样式或直接使用它。

<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">

    <TextBlock Text="Original ComboBox Style" Margin="5" />
    <ComboBox Width="200" Style="{DynamicResource DefaultComboBoxStyle}">
        <ComboBoxItem>Item 1</ComboBoxItem>
        <ComboBoxItem>Item 2</ComboBoxItem>
        <ComboBoxItem>Item 3</ComboBoxItem>
        <ComboBoxItem>Item 4</ComboBoxItem>
    </ComboBox>

    <TextBlock Text="MahApps ComboBox Style" Margin="5" />
    <ComboBox Width="200">
        <ComboBoxItem>Item 1</ComboBoxItem>
        <ComboBoxItem>Item 2</ComboBoxItem>
        <ComboBoxItem>Item 3</ComboBoxItem>
        <ComboBoxItem>Item 4</ComboBoxItem>
    </ComboBox>

</StackPanel>

此截图显示了原始的 ComboBox 样式(使用 Win10 主题)。

这是 MahApps 风格。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2018-05-08
    • 2017-12-23
    相关资源
    最近更新 更多