2015-03-24 41 views
0

我有一个CustomControl以下XAML:放在哪里交互触发的ControlTemplate

<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> 

我想用交互/ EventToCommand捕捉整个CustomControl keyDown事件。

喜欢的东西:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="KeyDown"> 
     <cmd:EventToCommand Command="{Binding KeyDownCommand, Mode=OneWay}" PassEventArs="True"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

我的问题是 - 我放在控件模板标记触发器在哪里?我想要做的这相当于在后面的代码:

this.KeyDown += ItemView_KeyDown; 

回答

0

你可以把他们内部控件模板或边界的元素:

<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> 
+0

感谢。有什么不同?如果我在边框中放置鼠标点击事件,文本框似乎总是关注并且事件不会触发(我试图单击来选择ItemView,然后再点击一下开始编辑文本框)。 – jidl 2015-03-25 05:01:30

+0

也是第一个选项抱怨ControlTemplate不是从DependencyObject派生的。有任何想法吗? – jidl 2015-03-25 05:29:31

+0

@jidl你找到了解决这个问题的解决方案吗? – 2017-05-15 11:50:31