在DataTemplate中的按钮上设置命令/操作

时间:2013-09-04 14:24:05

标签: c# wpf datatemplate

我为TabControl创建了一个新样式。在TabItem我有一个关闭按钮。现在,我希望用户能够单击该关闭按钮以关闭活动选项卡。

<Style x:Key="StudioTabControl" TargetType="{x:Type TabControl}">
    <Style.Resources>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <Grid Height="20" 
                                Background="{TemplateBinding Background}" 
                                SnapsToDevicePixels="True">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="35"/>
                            </Grid.ColumnDefinitions>
                            <ContentPresenter Grid.Column="0" 
                                              Margin="10,0,10,0" 
                                                HorizontalAlignment="Center" 
                                                VerticalAlignment="Center" 
                                                ContentSource="Header" />
                            <Button Grid.Column="1" 
                                      Width="15" 
                                      Height="15" 
                                      HorizontalAlignment="Center" 
                                      VerticalAlignment="Center" 
                                      Command= // CLOSE COMMAND OPERATION HERE. 
                                      DockPanel.Dock="Right">
                            ...

我知道我可以做类似

的事情
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
        <Actions:CloseTabItemAction TabItem="{Binding RelativeSource={RelativeSource AncestorType=TabItem}}" 
                                    TabControl="{Binding RelativeSource={RelativeSource AncestorType=TabControl}}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

在模板中设置关闭的TabItem Action并通过适当的代码。但是,如果我想在选项卡上包含第二个按钮,该按钮可以从模板中保留自定义图像集。 我怎么能这样做?如何在模板外部处理此按钮的点击?可以执行此操作的TabItem的示例是VS2012 ......

TabItemVS2012

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

Killercam!

我在DataTemplate上使用MenuItem进行了同样的操作。

我所做的是在Setter Property=Command内为类型Button添加Style。 这是我的代码:

<DataTemplate x:Key="Whatever">
<Style TargetType="MenuItem">
   <Setter Property="Command" Value="{Binding Comando}" />
   <Setter Property="CommandParameter" Value="{Binding Texto}"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<StackPanel Orientation="Horizontal">
    <!--<Image Source="{Binding Imagem}" />-->
    <AccessText Text="{Binding Texto}" />
</StackPanel>
</DataTemplate>

记住{Binding Comando}是我的ViewModel的ICommnd属性,如下所示:

private ICommand _Comando;
public ICommand Comando
{
    get
    {
        return _Comando;
    }
    set
    {
        _Comando = value;
        OnPropertyChanged("Comando");
    }
}

在我的视图中,我可以设置我想要的任何Comando(ICommand):

ViewModel.MenuSubItem.Add(new MenuViewModel { Texto = "xxxxx", Comando = WhateverCommand });

希望我有所帮助!