Silverlight,itemcontrol LostFocus和GetFocus没有触发

时间:2011-01-30 22:47:40

标签: c# silverlight focus itemscontrol

好的,所以情况如下:

我有一个ItemsControl,其中包含几个孩子。

这些孩子实际上是一个UserControl,这就是它的Xaml:

<Grid>
    <Grid.RowDefinitions>
         <RowDefinition Height="Auto" />
         <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <!--DAY HEADER-->
    <Border x:Name="dayHeader" Height="20" BorderBrush="#B0B6BE" BorderThickness="1" Grid.Row="0" Background="{StaticResource WeekHeader}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <TextBlock  Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" TextAlignment="Center"
                         TextWrapping="NoWrap" Margin="1.5,0,0,0" Text="18"/>

             <TextBlock  Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"
                         TextWrapping="NoWrap" Margin="2,0,0,0" Text="Thuesday" />
            </Grid>
    </Border>

    <!--DAY HOURS-->
    <ItemsControl x:Name="dayHours" Grid.Row="1">
         <ItemsControl.ItemTemplate>
              <DataTemplate>
                   <Border Name="dayHourBorder" Height="30" BorderBrush="#B0B6BE" Width="193" Tag="{Binding Index}" BorderThickness="1,0,1,1" Background="AliceBlue"
                                            MouseLeftButtonDown="dayHourBorder_MouseLeftButtonDown" MouseLeftButtonUp="dayHourBorder_MouseLeftButtonUp"
                                                MouseMove="dayHourBorder_MouseMove" />

              </DataTemplate>
         </ItemsControl.ItemTemplate>
    </ItemsControl>
  </Grid>

IN SHORT 它是第一行中有边框的网格 在第二行有一个ItemsControl。

现在好了...我想做的是,每当我在孩子ItemControls(白天)之间点击时,我希望他们在LostFocus()事件和GotFocus()事件上执行某些功能。

问题是......他们不开火!它试图从各个角度注册它们! HALP。

更新 我尝试在MouseLeftButtonDown上执行Focus(),但发生了什么,它直接进入OnLostFocus,这不是我想要的...... 我不明白

2 个答案:

答案 0 :(得分:0)

Here概述了Silverlight的重点。文章提到了需要满足的四个条件,以便控制得到关注。您应该检查这四个条件以供您控制,我认为应该没问题。

你还应该考虑你想要接收这些事件的元素,因为GotFocus和LostFocus是冒泡的事件。

答案 1 :(得分:0)

我通过这样做设法解决了这个问题: 做:this.Focus(); 然后:e.Handled = true;

问题是ItemControl通常无法保持焦点,因此click事件会冒泡。 但当我告诉他这是处理时,它会阻止它冒泡,不会失去焦点。