【问题标题】:WPF add button in comboboxWPF在组合框中添加按钮
【发布时间】:2016-07-25 06:35:06
【问题描述】:

我想在包含 ItemTemplate 的组合框中添加按钮。首先,我尝试的是这样的:

<ComboBox Name="oilWells_comboBox"
          Style="{StaticResource MMComboBox}"
          MaxWidth="100"
          ItemsSource="{Binding DataContext.OilWellCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}}"
          Margin="0">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <CheckBox IsChecked="{Binding Path=IsDisplay}" Checked="FilterDataGrid" Unchecked="FilterDataGrid">
                    <CheckBox.Content>
                        <TextBlock MinWidth="100" Text="{Binding Path=Name}" HorizontalAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
                    </CheckBox.Content>
                </CheckBox>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    <Button Content="Clear" Height="20" HorizontalAlignment="Stretch"></Button>
</ComboBox>

但是我有一个例外,它说我不能添加项目来控制,它有 ItemTemplate。第二个是这样的:

<ComboBox Name="oilWells_comboBox"
          Style="{StaticResource MMComboBox}"
          MaxWidth="100"
          ItemsSource="{Binding DataContext.OilWellCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}}"
          Margin="0">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <CheckBox IsChecked="{Binding Path=IsDisplay}" Checked="FilterDataGrid" Unchecked="FilterDataGrid">
                    <CheckBox.Content>
                        <TextBlock MinWidth="100" Text="{Binding Path=Name}" HorizontalAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
                        <Button Content="Clear" Height="20" HorizontalAlignment="Stretch"></Button>
                    </CheckBox.Content>
                </CheckBox>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

但在这种情况下,按钮会在每个复选框之后添加。你有什么想法,如何只做一次?提前谢谢你)

【问题讨论】:

  • 编辑 ComboBox 本身的 Template 属性。在VS中右键单击CB,选择Edit Template - Edit copy,然后在该模板中添加按钮
  • 您的问题不清楚 - 您是否希望该按钮作为 ComboBox 中的选项之一?您想创建自己的包含按钮的 ComboBox 吗?您希望 ComboBox 中的每个选项都包含一个按钮吗?
  • 我想添加一个按钮作为第一个组合框项,并且后面的所有项都必须是 ItemsTemplate 中的项

标签: wpf xaml combobox itemtemplate


【解决方案1】:
  1. 在设计器表面/或在设计器表面左侧的文档大纲中右键单击组合框 > 编辑模板 > 编辑副本。

  2. 这会在Window.Resources下生成一些Styles,找到ItemsPresenter并用StackPanelButton包裹如下图:

    <StackPanel Grid.ColumnSpan="2">
       <Button Content="Additional"/>
       <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </StackPanel>
    

【讨论】:

    【解决方案2】:

    在 windows 加载事件中试试这个,它应该可以工作。

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Button b = new Button();
        b.Content = "My Button";
        b.Click += new RoutedEventHandler(MyBtn_Click);
        oilWells_comboBox.Items.Add(b);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多