选择一个项目后,无法从WPF组合框项目中触发事件?

时间:2013-06-06 06:18:43

标签: wpf xaml silverlight-4.0 wpf-controls wpf-4.0

有一种情况我试图在某个时候安静地完成,无法找到使用Combo Box的方法。 我有一个组合框,其中包含一个包含按钮和文本块的Datatemplate。该按钮绑定到某个事件,因此当用户在组合框中单击它时,它会触发一个事件。它一直很好,直到我选择组合框项目后做出选择,而不是尝试单击按钮没有任何反应。当选择按钮触发事件时,一旦我从梳子盒中选择了按钮是单个项目的一部分。现在,当我尝试点击现在是梳子盒的选择项的按钮时,它不会触发任何事件。什么都没发生。

即使组合框项目处于选定模式,我希望按钮可以点击并触发事件。我怎样才能做到这一点? 我希望我的问题很清楚

代码如下 -

 <ComboBox x:Name="cbbox" Height="50" Width="200" ItemsSource="{Binding}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                   <Button Width="40" Height="30" Content="Clik" Click="Button_Click"></Button>
                    <TextBlock Text="{Binding val}"/>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

感谢

vj

1 个答案:

答案 0 :(得分:0)

唯一的方法是为ComboBox定义一个新的ControlTemplate。我在下面创建了一个Style,它将为您提供所需的功能。

  <Style x:Key="ComboBoxStyle" TargetType="{x:Type ComboBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition MaxWidth="18"/>
                        </Grid.ColumnDefinitions>
                        <TextBox Name="PART_EditableTextBox"
                                 Padding="5,0,0,0"
                                 Background="Azure"
                                 Height="{TemplateBinding Height}"
                                 IsEnabled="{TemplateBinding IsEditable}"/>
                        <ToggleButton Grid.Column="1" Margin="0"
                                     Height="{TemplateBinding Height}"
                                     Focusable="False"
                                     IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                                     ClickMode="Press">
                            <Path Grid.Column="1"
                                  HorizontalAlignment="Center"
                                  VerticalAlignment="Center"
                                  Data="M 0 0 L 4 4 L 8 0 Z"
                                  Fill="DodgerBlue" />
                        </ToggleButton>
                        <ContentPresenter Name="ContentSite"
                                          Content="{TemplateBinding SelectionBoxItem}"
                                          ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                                          ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                                          VerticalAlignment="Center"
                                          HorizontalAlignment="Left"
                                          Visibility="Visible"
                                          Margin="5,0,0,0"/>
                        <Popup Name="Popup"
                               Placement="Bottom"
                               IsOpen="{TemplateBinding IsDropDownOpen}"
                               AllowsTransparency="True" 
                               Focusable="False"
                               PopupAnimation="Slide">
                            <Grid 
                                  Name="DropDown"
                                  SnapsToDevicePixels="True"                
                                  MinWidth="{TemplateBinding ActualWidth}"
                                  MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                <Border 
                                    x:Name="DropDownBorder"
                                    Background="Azure"
                                    BorderThickness="1"
                                    BorderBrush="Azure"/>
                                <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="Gray"/>
                        </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="4"/>
                            <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"/>
                            <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

您需要修改颜色,边距等以满足您的需求,但它应该为您提供一个良好的起点。