我的应用程序中有一些ListBox,它们将包含电话簿联系人。我希望所有这些ListBox都具有DataTemplate作为它们的ItemsTemplates,并具有一些功能,如编辑,删除和查看,就像下面的代码所示:
<DataTemplate x:Key="ContactItemTemplate">
<TextBlock Foreground="Black" Background="{StaticResource DataTemplateBackgroundBrush}" Padding="5,10" Margin="4,3">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
<TextBlock.ContextMenu>
<ContextMenu FontFamily="B Yekan">
<MenuItem Header="Edit" Click="btn_EditContact_Click"/>
<MenuItem Header="Delete" Click="btn_DeleteContact_Click"/>
<MenuItem Header="View" Click="btn_EditContact_Click"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</DataTemplate>
这个模板不能被写成一个资源字典中的样式并添加到控件中,因为事件处理程序无法在资源字典中呈现。所以一种方法是在每个具有 Contact ListBox 的窗口/页面中复制此模板及其处理程序,如下所示:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Styles/Controls_Style.xaml"/>
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="AttachmentsTemplate">
<Border Height="150" Width="120" BorderThickness="1" BorderBrush="{StaticResource DefaultBorderBrush}" Margin="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Bottom" TextWrapping="WrapWithOverflow"/>
<Image Grid.Row="1" Source="{Binding Image}" Margin="5,0"/>
</Grid>
</Border>
</DataTemplate>
</ResourceDictionary>
</Page.Resources>
有没有其他方法可以编写一个DataTemplate,使其具备某些功能,并在任何地方都可以使用?我应该编写UserControl而不是DataTemplate吗?
Command
属性绑定到视图模型中的ICommand
属性。 - Clemens