组合框样式未显示所选项目

时间:2014-07-17 13:40:30

标签: c# wpf combobox

尽管对WPF知之甚少,我还是获得了WPF应用程序。 我有一个组合框的样式看起来非常好,但项目显示在下拉列表中,但所选项目没有出现在未显示下拉列表时显示的主文本框中。这根本就是空的。

我很确定我需要在某个地方放置一个内容演示者,但问题是在哪里?

我相信这是与这种风格相关的所有代码。

<ControlTemplate x:Key="SearchActionComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="20" />
        </Grid.ColumnDefinitions>
        <Border x:Name="Border"
                Grid.ColumnSpan="2"
                Background="Green"
                BorderBrush="Black"
                BorderThickness="2"
                CornerRadius="3" />
        <Border Grid.Column="0"
                Margin="1"
                Background="White"
                BorderBrush="Black"
                BorderThickness="1"
                CornerRadius="0" />
        <Path x:Name="Arrow"
              Grid.Column="1"
              HorizontalAlignment="Center"
              VerticalAlignment="Center"
              Data="M0,0 L0,2 L4,6 L8,2 L8,0 L4,4 z"
              Fill="White" />
    </Grid>
</ControlTemplate>

 <Style x:Key="SearchActionComboBoxMenu" TargetType="ComboBox">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <Grid>
                    <ToggleButton Name="ToggleButton"
                                  Grid.Column="2"
                                  ClickMode="Press"
                                  Cursor="Hand"

                                  Focusable="false"
                                  Foreground="Black"
                                  IsChecked="{Binding Path=IsDropDownOpen,
                                                      Mode=TwoWay,
                                                      RelativeSource={RelativeSource TemplatedParent}}"
                                  Template="{StaticResource SearchActionComboBoxToggleButton}" />



                    <TextBox x:Name="PART_EditableTextBox"
                             Margin="3,3,23,3"
                             HorizontalAlignment="Left"
                             VerticalAlignment="Center"
                             Background="White"
                             Focusable="True"
                             Foreground="Black"
                             IsReadOnly="{TemplateBinding IsReadOnly}"
                             Style="{x:Null}"
                             Template="{StaticResource ComboBoxTextBox}"
                             Visibility="Hidden" />
                    <Popup Name="Popup"
                           Width="200"
                           AllowsTransparency="True"
                           Focusable="False"
                           IsOpen="{TemplateBinding IsDropDownOpen}"
                           Placement="Bottom"
                           PopupAnimation="Slide">

                        <Grid Name="DropDown"
                              MinWidth="{TemplateBinding ActualWidth}"
                              MaxHeight="{TemplateBinding MaxDropDownHeight}"
                              SnapsToDevicePixels="True">
                            <Border x:Name="DropDownBorder"
                                    Background="White"
                                    BorderBrush="Black"
                                    BorderThickness="1" />
                            <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                            </ScrollViewer>
                        </Grid>
                    </Popup>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasItems" Value="false">
                        <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="#888888" />
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                    </Trigger>
                    <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
                        <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="0" />
                        <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0" />
                    </Trigger>
                    <Trigger Property="IsEditable" Value="true">
                        <Setter Property="IsTabStop" Value="false" />
                        <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />

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

如果您需要我可能提供的其他任何我未提供的代码,请告诉我。

1 个答案:

答案 0 :(得分:2)

您尚未设置样式

的contentpresenter
 <Style x:Key="SearchActionComboBoxMenu" TargetType="ComboBox">
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <ToggleButton Name="ToggleButton" Grid.Column="2" ClickMode="Press" Cursor="Hand" Focusable="false" Foreground="Black" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" Template="{StaticResource SearchActionComboBoxToggleButton}" />

                        //added contentpresenter here

                        <ContentPresenter x:Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3" TextElement.Foreground="Red" VerticalAlignment="Stretch" HorizontalAlignment="Left"/>

                        <TextBox x:Name="PART_EditableTextBox" Margin="3,3,23,3" HorizontalAlignment="Left" VerticalAlignment="Center" Background="White" Focusable="True" Foreground="Black" IsReadOnly="{TemplateBinding IsReadOnly}" Style="{x:Null}" Visibility="Hidden" />
                        <Popup Name="Popup" Width="200" AllowsTransparency="True" Focusable="False" IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" PopupAnimation="Slide">
                            <Grid Name="DropDown" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}" SnapsToDevicePixels="True">
                                <Border x:Name="DropDownBorder" Background="White" BorderBrush="Black" BorderThickness="1" />
                                <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                    <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                </ScrollViewer>
                            </Grid>
                        </Popup>
                    </Grid>

                    ........................

                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers />
    </Style>
相关问题