C# 在ControlTemplate中放置交互触发器的位置
对于CustomControl,我有以下XAML: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
<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>