DependencyProperty未附加

时间:2016-02-25 17:46:36

标签: c# dependency-properties xbox360

在远离视图导航时调用SetFocusIndex。这应该将DependencyProperty注册/附加到指定的控件。

返回视图时调用GetFocusIndex。这应该提取已注册/附加的DependencyProperty,它包含具有焦点的最后一个控件(EightTileGrid项等)的索引。

我看到设置了正确的DependencyProperty,但是当我在后退导航中检索它时,它返回-1值,好像该属性从未设置过。

设置逻辑:

public static readonly DependencyProperty FocusIndexProperty =
DependencyProperty.RegisterAttached(
   "FocusIndex",
   typeof(int),
   typeof(GamePadFocusManager),
   new PropertyMetadata(-1));

public static int GetFocusIndex(DependencyObject obj)
{
    return (int)obj.GetValue(FocusIndexProperty); 
}

public static void SetFocusIndex(DependencyObject obj, int value) 
{  
    obj.SetValue(FocusIndexProperty, value); 
}
private void OnNavigatingMessage(NavigatingMessage navigatingMessage)
{           
  Messenger.Default.Unregister<NavigatingMessage>(this, OnNavigatingMessage);
  SaveFocusIndex();
}

 private void SaveFocusIndex()
 {
    var controls = VisualTreeQueryHelper.FindChildrenOfType<Control>(this).ToList();

    for (int i = 0; i < controls.Count; i++)
    {
        if (controls[i].ContainsFocus())
        {
           GamePadFocusManager.SetFocusIndex(this, i);
           break;
        }
    }
 }

检索逻辑:

private void BaseTileGrid_GotFocus(object sender, RoutedEventArgs e)
{
    if ((FocusManager.GetFocusedElement() == this) || !this.ContainsFocus())
     {     

        SetFocusOnChildControl();
     }
}

public virtual void SetFocusOnChildControl()
{
    var focusIndex = Math.Max(0, GamePadFocusManager.GetFocusIndex(this)); 
    var contentControls = VisualTreeQueryHelper.FindChildrenOfType<ContentControl>(this).ToList();

    DispatcherHelper.BeginInvokeAtEndOfUiQueue(() =>
      {
        if (contentControls.Count > focusIndex)
        {
            if (this.ContainsFocus())
            { 
                GamePadFocusManager.FocusOn(contentControls[focusIndex]);
            }
        }
    });
}

网格

public class BaseTileGrid : Control
{
...
}

的Xaml:

  <GridLayout:BaseTileGrid  x:Name="recentlyWatched"
        Style="{StaticResource FourByTwoGrid}"
        ItemsSource="{Binding ItemViewModels}" 
        ItemTemplate="{StaticResource GridLayoutDataTemplateSelector}" 
        OverflowPageTitle="{Binding OverflowPageTitle}"
        MoreButtonCommand="{Binding MoreButtonCommand}"/>

0 个答案:

没有答案