如何在XAML中将Dropdown更改为Dropup

时间:2018-11-26 21:54:16

标签: xaml

我最近下载了Wox,这是Windows的另一种搜索方式。其搜索会自动显示为下拉菜单。设置中没有办法将其更改为“下拉”,而不是下拉。我在任何地方都找不到这个问题,但是制造商回答说,有关外观更改的问题,以编辑基本主题文档。我仔细阅读了文档,发现在保管箱掉落时似乎找不到切换的地方,但是我也只有非常基本的编码知识。我试图搜索如何在线执行此操作,但似乎找不到任何东西。标记文件如下。我有什么可以改变的,以使其掉落吗?

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:system="clr-namespace:System;assembly=mscorlib">
<Style x:Key="BaseQueryBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="FontSize" Value="28" />
    <Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei" />
    <Setter Property="FontWeight" Value="Medium" />
    <Setter Property="Height" Value="30" />
    <Setter Property="Background" Value="#616161" />
    <Setter Property="Foreground" Value="#E3E0E3" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
</Style>
<Style x:Key="BaseWindowBorderStyle" TargetType="{x:Type Border}">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="CornerRadius" Value="0" />
    <Setter Property="Background" Value="#424242"></Setter>
    <Setter Property="Padding" Value="4 4 4 4" />
</Style>
<Style x:Key="BaseWindowStyle" TargetType="{x:Type Window}">
    <Setter Property="Width" Value="350" />
    <Setter Property="MaxWidth" Value="800" />
</Style>

<Style x:Key="BasePendingLineStyle" TargetType="{x:Type Line}">
    <Setter Property="Stroke" Value="Blue" />
</Style>

<!-- Item Style -->
<Style x:Key="BaseItemTitleStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="#FFFFF8" />
    <Setter Property="FontSize" Value="16" />
    <Setter Property="FontWeight" Value="Medium" />
    <Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei" />
</Style>
<Style x:Key="BaseItemSubTitleStyle" TargetType="{x:Type TextBlock}" >
    <Setter Property="Foreground" Value="#D9D9D4" />
    <Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei" />
</Style>
<Style x:Key="BaseItemNumberStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="HorizontalAlignment" Value="Center" />
    <Setter Property="Margin" Value="3 0 0 0" />
    <Setter Property="FontSize" Value="22" />
</Style>
<Style x:Key="BaseItemTitleSelectedStyle" TargetType="{x:Type TextBlock}" >
    <Setter Property="Foreground" Value="#FFFFF8" />
    <Setter Property="FontSize" Value="16" />
    <Setter Property="FontWeight" Value="Medium" />
</Style>
<Style x:Key="BaseItemSubTitleSelectedStyle" TargetType="{x:Type TextBlock}" >
    <Setter Property="Foreground" Value="#D9D9D4" />
</Style>

<Style x:Key="BaseListboxStyle" TargetType="{x:Type ListBox}">
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBox">
                <ScrollViewer Focusable="false" Template="{DynamicResource ScrollViewerControlTemplate}">
                    <VirtualizingStackPanel IsItemsHost="True" />
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- ScrollViewer Style -->
<ControlTemplate x:Key="ScrollViewerControlTemplate" TargetType="{x:Type ScrollViewer}">
    <Grid x:Name="Grid" Background="{TemplateBinding Background}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <!--content in the left of ScrollViewer, just default-->
        <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                    CanContentScroll="{TemplateBinding CanContentScroll}"
                                    CanHorizontallyScroll="False"
                                    CanVerticallyScroll="False"
                                    ContentTemplate="{TemplateBinding ContentTemplate}"
                                    Content="{TemplateBinding Content}"
                                    Grid.Column="0"
                                    Margin="{TemplateBinding Padding}"
                                    Grid.Row="0" />

        <!--Scrollbar in thr rigth of ScrollViewer-->
        <ScrollBar x:Name="PART_VerticalScrollBar"
                       AutomationProperties.AutomationId="VerticalScrollBar"
                       Cursor="Arrow"
                       Grid.Column="1"
                       Margin="3 0 0 0"
                       Maximum="{TemplateBinding ScrollableHeight}"
                       Minimum="0"
                       Grid.Row="0"
                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                       Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                       ViewportSize="{TemplateBinding ViewportHeight}"
                       Style="{DynamicResource ScrollBarStyle}" />

    </Grid>
</ControlTemplate>

<!-- button style in the middle of the scrollbar -->
<Style x:Key="BaseThumbStyle" TargetType="{x:Type Thumb}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="IsTabStop" Value="false"/>
    <Setter Property="Focusable" Value="false"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border CornerRadius="2" DockPanel.Dock="Right" Background="#616161" BorderBrush="Transparent" BorderThickness="0" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="BaseScrollBarStyle" TargetType="{x:Type ScrollBar}">
    <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="false" />
    <!-- must set min width -->
    <Setter Property="MinWidth" Value="0"/>
    <Setter Property="Width" Value="5"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <DockPanel>
                    <Track x:Name="PART_Track" IsDirectionReversed="true" DockPanel.Dock="Right">
                        <Track.Thumb>
                            <Thumb Style="{DynamicResource ThumbStyle}"/>
                        </Track.Thumb>
                    </Track>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>
</ResourceDictionary>

1 个答案:

答案 0 :(得分:0)

以下是更改ComboBox的 ControlTemplate 的MSDN示例:https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/combobox-styles-and-templates

有趣的部分是弹出窗口:

<Popup x:Name="Popup"
             Placement="Bottom"
             IsOpen="{TemplateBinding IsDropDownOpen}"
             AllowsTransparency="True"
             Focusable="False"
             PopupAnimation="Slide">

展示位置更改为顶部应该会有所帮助。