C# 在ControlTemplate中放置交互触发器的位置

C# 在ControlTemplate中放置交互触发器的位置,c#,wpf,xaml,mvvm-light,C#,Wpf,Xaml,Mvvm Light,对于CustomControl,我有以下XAML: <Style TargetType="{x:Type itvw:ItemView}"> <Setter Property="Focusable" Value="True"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type

对于CustomControl,我有以下XAML:

<Style TargetType="{x:Type itvw:ItemView}">
    <Setter Property="Focusable" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type itvw:ItemView}">
                <Border>
                    <Grid>
                        <TextBox/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                <!--triggers-->
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您可以将它们放在ControlTemplate或Border元素中:

<Style TargetType="{x:Type itvw:ItemView}">
<Setter Property="Focusable" Value="True"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type itvw:ItemView}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="KeyDown">
                    <cmd:EventToCommand Command="{Binding KeyDownCommand, Mode=OneWay}" PassEventArs="True"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <Border>
                <Grid>
                    <TextBox/>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
            <!--triggers-->
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>

<Style TargetType="{x:Type itvw:ItemView}">
<Setter Property="Focusable" Value="True"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type itvw:ItemView}">
            <Border>                
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="KeyDown">
                        <cmd:EventToCommand Command="{Binding KeyDownCommand, Mode=OneWay}" PassEventArs="True"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
                <Grid>
                    <TextBox/>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
            <!--triggers-->
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>


谢谢。有什么区别?如果我将鼠标单击事件放在边框中,文本框似乎始终保持焦点,并且事件不会触发(我尝试单击一次以选择ItemView,然后再次单击以开始编辑文本框)。此外,第一个选项还抱怨ControlTemplate不是从DependencyObject派生的。有什么想法吗?@jidl你找到解决这个问题的办法了吗?没有。很抱歉
this.KeyDown += ItemView_KeyDown;
<Style TargetType="{x:Type itvw:ItemView}">
<Setter Property="Focusable" Value="True"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type itvw:ItemView}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="KeyDown">
                    <cmd:EventToCommand Command="{Binding KeyDownCommand, Mode=OneWay}" PassEventArs="True"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <Border>
                <Grid>
                    <TextBox/>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
            <!--triggers-->
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>

<Style TargetType="{x:Type itvw:ItemView}">
<Setter Property="Focusable" Value="True"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type itvw:ItemView}">
            <Border>                
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="KeyDown">
                        <cmd:EventToCommand Command="{Binding KeyDownCommand, Mode=OneWay}" PassEventArs="True"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
                <Grid>
                    <TextBox/>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
            <!--triggers-->
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>