WPF -- 控件模板 (ItemsPanelTemplate)(二)

本文介绍如何通过ItemsPanelTemplate和ButtonCollection实现自定义MessageBox控件的不同样式,根据MessageBoxButton类型动态展示不同操作按钮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面介绍了控件模板的应用和Style的差异,并以ControlTemplate举例,接下来举一个ItemsPanelTemplate的例子:

比如我现在要写一个自定义MessageBox自定义控件,当不同的message类型时会显示不同的样式,其中MessageBox下面的操作按钮群显示的按钮也不一样。。。。
     switch (button)
            {
                case MessageBoxButton.OK:
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "确定", FlatButtonSkinEnum.primary, MessageBoxResult.OK));
                    break;
                case MessageBoxButton.OKCancel:
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "取消", FlatButtonSkinEnum.ghost, MessageBoxResult.Cancel));
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "确定", FlatButtonSkinEnum.primary, MessageBoxResult.OK));
                    break;
                case MessageBoxButton.YesNoCancel:
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "取消", FlatButtonSkinEnum.Default, MessageBoxResult.Cancel));
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "否", FlatButtonSkinEnum.ghost, MessageBoxResult.No));
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "是", FlatButtonSkinEnum.primary, MessageBoxResult.Yes));
                    break;
                case MessageBoxButton.YesNo:
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "否", FlatButtonSkinEnum.ghost, MessageBoxResult.No));
                    messageBox.ButtonCollection.Add(CreateButton(messageBox, "是", FlatButtonSkinEnum.primary, MessageBoxResult.Yes));
                    break;
                default:
                    break;
            }

上述代码为自定义控件中的控制MessageBox不同类型显示操作按钮群的代码,这里用ButtonCollection来放置按钮组
  /// <summary>
        /// 按钮组
        /// </summary>
        public ObservableCollection<Button> ButtonCollection
        {
            get { return (ObservableCollection<Button>)GetValue(ButtonCollectionProperty); }
            private set { SetValue(ButtonCollectionProperty, value); }
        }

再看看Xaml代码:
    <!--#region 按钮组-->
                        <ItemsControl x:Name="PART_ButtonPanel" Grid.Row="4" Margin="0,10,0,15" HorizontalAlignment="Center"
                                      ItemsSource="{TemplateBinding ButtonCollection}"
                                      ScrollViewer.VerticalScrollBarVisibility="Disabled"
                                      HorizontalContentAlignment="Center"
                                      VerticalContentAlignment="Center">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Rows="1" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                        </ItemsControl>
                        <!--#endregion-->

可以看到,ButtonCollection是用一个ItemsControl来呈现, ItemsSource="{TemplateBinding ButtonCollection}"便是绑定的代码,
并且出现了  <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Rows="1" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>

ItemsPanelTemplate:用以定义集合控件的容器外观,如ListBox,Combox 等等,这里使用一个自定义的listBox用以说明,其默认外观是上下排列,这里修改成横向排列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值