我的应用程序中有一些列表框,其中包含电话簿的联系人。我希望所有这些 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>
它不能写成 ResourceDictionary 中的样式并添加到控件中,因为事件处理程序不能出现在 ResourceDictionaries 中。因此,一种方法是复制此模板及其在每个窗口/页面中的处理程序,这些处理程序具有如下所示的联系人列表框:
<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 并在我想要的任何地方使用它?我应该写一个用户控件而不是一个数据模板吗?