具有自定义样式的WPF ComboBox,在单击ComboBox内部后无法展开DropDown

时间:2011-06-29 12:55:52

标签: wpf xaml combobox styles

我已经为ComboBox添加了以下样式,我在一年前碰巧将其作为WPFToolkit的一部分找到了。

它缺少一个基本的功能,也就是说,如果我点击TextBox的{​​{1}}内部,我希望下拉菜单像往常一样展开。在此模板中,只能通过直接点击ComboBox来打开下拉菜单。

我不知道在模板样式中寻找什么,你能指点我吗?

模板样式:

ComboBoxToggleButton

1 个答案:

答案 0 :(得分:4)

ComboBox有两个用例。第一个是IsEditable是假的。在这种情况下,用户被限制为选择预定义项目。第二个是当IsEditable为true时,这种情况允许用户输入文本以及选择预定义的项目。

使用默认的Aero样式,单击“文本”区域(即IsEditable为true时)不会显示下拉列表。单击焦点/选择文本。其他样式会打开下拉列表。

要实现此目的,在另一个控件的顶部放置一个透明的ToggleButton,用于切换下拉可见性。类似的东西:

<Grid Grid.IsSharedSizeScope="true">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"
                          SharedSizeGroup="ComboBoxButton"/>
    </Grid.ColumnDefinitions>
    <TextBox x:Name="PART_EditableTextBox"
             Grid.Column="1"
             Style="{StaticResource ComboBoxEditableTextBox}"
             IsReadOnly="{Binding Path=IsReadOnly,RelativeSource={RelativeSource TemplatedParent}}"
             Margin="{TemplateBinding Padding}"
             HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
             VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
    <ToggleButton Background="{x:Null}"
                  Grid.ColumnSpan="3"
                  Style="{StaticResource ComboBoxTransparentButtonStyle}"
                  IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"/>
</Grid>

这是默认的Luna风格,您可以从here获取(或直接从here下载)。

相关问题