前面介绍了控件模板的应用和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>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

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