Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Здравствуйте, подскажите, пожалуйста, как в TreeView установить фокус на элемент с определенным значением

int i = TreeView1.Items.IndexOf(Id);
AnalysisTree.Items.MoveCurrentToPosition(i);

При выполнении этого кода изменений на форме не происходит
25 ноя 10, 13:23    [9838251]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Опечатка в пердыдущем сообщении

int i = TreeView1.Items.IndexOf(Id);
TreeView1.Items.MoveCurrentToPosition(i);
25 ноя 10, 13:24    [9838259]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
люди, отзовитесь! :(
25 ноя 10, 16:04    [9839818]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
((TreeViewItem)TreeView1.Items[i]).IsSelected = true; ругается

TreeView1.Items[i] возвращает не узел, а его содержимое
В чем ошибка?
25 ноя 10, 16:29    [9840027]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
насколько я помню, надо у конкретного TreeViewItem установить IsSelected = true
25 ноя 10, 16:30    [9840036]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
из содержимого (Item) надо получить контейнер (TreeViewItem) с помощью генератора http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.containerfromitem.aspx
25 ноя 10, 16:34    [9840065]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
как получить контейнер? приведите, пожалуйста, пример
25 ноя 10, 16:36    [9840079]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
или забиндить TreeViewItem.IsSelected на Item.IsSelected, как предлагают отцы основатели mvvm
25 ноя 10, 16:37    [9840084]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
Юлия86
как получить контейнер? приведите, пожалуйста, пример

var Generator = TreeView.ItemContainerGenerator;
var TreeViewItem = Generator.ContainerFromItem(TreeView.Items[i]);
TreeViewItem.IsSelected = true;

как-то так
25 ноя 10, 16:38    [9840094]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Вестник,

TreeView.ItemContainerGenerator;

В TreeView нет свойства ItemContainerGenerator :(
25 ноя 10, 16:45    [9840150]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
да вы что? он разве не из ItemsControl выведен? (не могу сейчас посмотреть, писал по памяти)
25 ноя 10, 16:47    [9840167]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
сейчас проверил: в SL4 точно есть
25 ноя 10, 16:50    [9840188]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
TreeViewItem obj = TreeView1.ItemContainerGenerator.ContainerFromItem(TreeView1.Items[i]) as TreeViewItem;
obj.IsSelected = true;

не работает :( ничего не происходит
25 ноя 10, 16:51    [9840193]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
IsExpanded = true добавьте
25 ноя 10, 16:52    [9840202]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
IsExpanded = true разворачивает узел, не фокусирует этот элемент на форме, для того, чтобы его увидеть, приходится прокручивать скрол.

может надо как-то форму активной сделать?
25 ноя 10, 16:59    [9840247]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
Юля, больше я вам ничем помочь не смогу. я помню, что у меня прекрасно работало IsSelected, причем оно само прокручивало и разворачивало без дополнительных усилий. правда, я биндил на ViewModel.IsSelected
25 ноя 10, 17:01    [9840274]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Все равно, спасибо Вам большое!!! Очень помогли :)
25 ноя 10, 17:04    [9840295]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
соврал, биндю оба, сначала IsExpanded, потом IsSelected
25 ноя 10, 17:07    [9840330]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Вестник, извините пожалуйста за нескоромный вопрос, а что такое биндить?
25 ноя 10, 17:19    [9840438]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5951
Юлия86
Вестник, извините пожалуйста за нескоромный вопрос, а что такое биндить?

Картинка с другого сайта. от слова binding (т.е. устанавливать привязку).
25 ноя 10, 17:22    [9840470]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Юлия86
Member

Откуда:
Сообщений: 57
Compositum, понятно :),
а вот как забиндить TreeViewItem.IsSelected на Item.IsSelected непонятно,
не подскажите?
25 ноя 10, 17:26    [9840507]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5951
Юлия86
Compositum, понятно :),
а вот как забиндить TreeViewItem.IsSelected на Item.IsSelected непонятно,
не подскажите?

<TreeViewItem IsSelected="{Binding ElementName = ИмяЭлемента, Path = Item.IsSelected}"/>
как-то так (навскидку).
25 ноя 10, 17:33    [9840572]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
для mvvm это не так просто. я делал так:

public class TreeViewItemEx : TreeViewItem
    {
        internal static TreeViewItemEx CreateBindings()
        {
            TreeViewItemEx tvi = new TreeViewItemEx();

            Binding expandedBinding = new Binding("IsExpanded");
            expandedBinding.Mode = BindingMode.TwoWay;
            tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);

            Binding selectedBinding = new Binding("IsSelected");
            selectedBinding.Mode = BindingMode.TwoWay;
            tvi.SetBinding(TreeViewItemEx.IsSelectedProperty, selectedBinding);

            return tvi;
        }

        protected override DependencyObject GetContainerForItemOverride()
        {
            return CreateBindings();
        }
    }

    public class TreeViewEx : TreeView
    {
        protected override DependencyObject GetContainerForItemOverride()
        {
            return TreeViewItemEx.CreateBindings();
        }
    }
25 ноя 10, 17:38    [9840614]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5951
привязку лучше прописывать в xaml - чем меньше кода, тем лучше (имхо).
25 ноя 10, 17:40    [9840634]     Ответить | Цитировать Сообщить модератору
 Re: TreeView изменение фокуса  [new]
Вестник
Member

Откуда:
Сообщений: 772
в xaml вы не можете прописать использование TreeViewItem, если мне не изменяет память
25 ноя 10, 17:41    [9840649]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить