Exemple #1
0
        /// <summary>
        /// TreeViewのアイテムが選択された場合のスクロール
        /// </summary>
        /// <param name="page"></param>
        private void updateSelectedItemFromTreeView(MLTPage page)
        {
            PageListView obj;

            if (this.View.TryGetTarget(out obj))
            {
                obj.AAListBox.ScrollIntoView(page);
            }
        }
Exemple #2
0
 /// <summary>
 /// ListViewの選択アイテム変更
 /// </summary>
 /// <param name="page"></param>
 private void updateSelectedItem(MLTPage page)
 {
     if (page != null)
     {
         PageListView obj;
         if (this.View.TryGetTarget(out obj))
         {
             obj.SelectedItem = page;
         }
     }
 }
        /// <summary>
        /// ListViewの選択に合わせて、TreeViewの状態を更新
        /// </summary>
        /// <param name="page"></param>
        private void updateSelectedItemFromListView(MLTPage page)
        {
            if (page == null || this.MLTPageIndexList.Value == null)
            {
                return;
            }

            foreach (var node in this.MLTPageIndexList.Value)
            {
                if (node.Page == page)
                {
                    // 一致したら選択状態にする(一応子要素は閉じる)
                    node.IsExpanded.Value = false;
                    node.IsSelected.Value = true;
                    break;
                }
                else
                {
                    // 子要素のチェック
                    if (node.Children == null)
                    {
                        // なければ選択状態を解除
                        node.IsExpanded.Value = false;
                        continue;
                    }

                    // 子要素のチェック
                    // MLTの仕様として、子要素の確認は1段のみでよい
                    foreach (var child in node.Children)
                    {
                        if (child.Page == page)
                        {
                            // 一致ししたら子要素を開いて、選択状態にする
                            node.IsExpanded.Value  = true;
                            child.IsSelected.Value = true;
                            break;
                        }

                        // 一致しなかったら子要素を閉じて、選択状態を解除
                        node.IsExpanded.Value  = false;
                        child.IsSelected.Value = false;
                    }
                }
            }
        }
        private void TreeViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            // SelectedItemChangedイベントの処理だと、ListBoxの選択時に交互に更新が走ってデッドロックする可能性がある
            // そのため、TreeViewのほうはMouseLeftButtonDownイベントで実装する(Selectでは更新はかけない)

            TreeViewItem item = (TreeViewItem)sender;

            var pageIndex = item.DataContext as MLTPageIndex;

            this.SelectedItem = pageIndex.Page;

            // ここら辺のFocusの処理がなんで必要なのかはいまいち不明瞭
            // http://stackoverflow.com/questions/30356236/mouseleftbuttondown-event-not-raised-in-treeviewitem-why
            item.Focusable = true;
            item.Focus();
            item.Focusable = false;
            e.Handled      = true;
        }