如何在itemscontrol中的datatemplate外添加一个按钮

时间:2015-08-05 09:25:19

标签: wpf xaml datatemplate itemscontrol itemtemplate

我已经创建了一个WPF app.In我有一个Datatemplate如下

 <DataTemplate x:Key="ItemTemplate">
    <StackPanel>
        <TextBlock Text="item"/>
        <TextBlock Text="{Binding Number}"/>
    </StackPanel>
 </DataTemplate>

我有像这样的ItemsControl

 <ItemsControl ItemsSource="{Binding Items}"
                      Grid.Column="1"
                      Grid.Row="3"
                      ItemTemplate="{StaticResource ItemTemplateWithButton}" />

我需要像这样的项目模板

    <DataTemplate x:Key="ItemTemplateWithButton">
        <StackPanel>
            <StackPanel>
                <TextBlock Text="item"/>
                <TextBlock Text="{Binding Number}"/>
            </StackPanel>
            <StackPanel>
                <Button>
                    <StackPanel>
                        <TextBlock Text="item"/>
                        <TextBlock Text="{Binding Number}"/>
                    </StackPanel>
                </Button>
            </StackPanel>
        </StackPanel>
    </DataTemplate>

是否有可能在新的itemscontrol中重用datatemplate?

3 个答案:

答案 0 :(得分:2)

您也可以使用ContentControl

<DataTemplate x:Key="ItemTemplate">
    <StackPanel>
        <TextBlock Text="item"/>
        <TextBlock Text="{Binding Number}"/>
    </StackPanel>
</DataTemplate>
<DataTemplate x:Key="ItemTemplateWithButton">
    <StackPanel>
        <ContentControl ContentTemplate="{StaticResource ItemTemplate}" />
        <Button>
            <ContentControl ContentTemplate="{StaticResource ItemTemplate}" />
        </Button>
    </StackPanel>
</DataTemplate>

答案 1 :(得分:1)

通过阅读this answer以及评论中提到的Liero,我理解的是,使用DataTemplate或{{{{}}}可以重复使用ContentPresenter 1}}。但是:

  1. ContentControl更轻量级。
  2. ContentPresenter旨在用于控件模板中。
  3. ContentPresenter旨在按原样使用,ContnetPresenter旨在扩展(继承自)。
  4. 因此,这是一个基于您所问的解决方案:

    ContentControl

答案 2 :(得分:0)

您可以创建一个UserControl来保存您想要重用的xaml:

<UserControl x:Class="StackOverflow.SharedControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <StackPanel>
            <TextBlock Text="item">
            </TextBlock>
            <TextBlock Text="{Binding Number}"></TextBlock>
        </StackPanel>
    </Grid>
</UserControl>

然后在两个模板中使用此UserControl。

<DataTemplate x:Key="ItemTemplate">
    <controls:SharedControl/>
</DataTemplate>

<DataTemplate x:Key="ItemTemplateWithButton">
    <StackPanel>
        <controls:SharedControl/>
        <StackPanel>
            <Button>
                <StackPanel>
                    <TextBlock Text="item">
                    </TextBlock>
                    <TextBlock Text="{Binding Number}"></TextBlock>
                </StackPanel>
            </Button>
        </StackPanel>
    </StackPanel>
</DataTemplate>