powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeView изменение фокуса
30 сообщений из 30, показаны все 2 страниц
TreeView изменение фокуса
    #36976710
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите, пожалуйста, как в TreeView установить фокус на элемент с определенным значением

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

При выполнении этого кода изменений на форме не происходит
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36976712
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка в пердыдущем сообщении

int i = TreeView1.Items.IndexOf(Id);
TreeView1.Items.MoveCurrentToPosition(i);
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977236
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
люди, отзовитесь! :(
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977322
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
((TreeViewItem)TreeView1.Items[i]).IsSelected = true; ругается

TreeView1.Items[i] возвращает не узел, а его содержимое
В чем ошибка?
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977326
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я помню, надо у конкретного TreeViewItem установить IsSelected = true
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977343
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из содержимого (Item) надо получить контейнер (TreeViewItem) с помощью генератора http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.containerfromitem.aspx
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977348
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как получить контейнер? приведите, пожалуйста, пример
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977350
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или забиндить TreeViewItem.IsSelected на Item.IsSelected, как предлагают отцы основатели mvvm
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977354
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юлия86как получить контейнер? приведите, пожалуйста, пример
var Generator = TreeView.ItemContainerGenerator;
var TreeViewItem = Generator.ContainerFromItem(TreeView.Items[i]);
TreeViewItem.IsSelected = true;

как-то так
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977382
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вестник,

TreeView.ItemContainerGenerator;

В TreeView нет свойства ItemContainerGenerator :(
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977394
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да вы что? он разве не из ItemsControl выведен? (не могу сейчас посмотреть, писал по памяти)
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977406
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас проверил: в SL4 точно есть
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977409
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TreeViewItem obj = TreeView1.ItemContainerGenerator.ContainerFromItem(TreeView1.Items[i]) as TreeViewItem;
obj.IsSelected = true;

не работает :( ничего не происходит
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977415
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsExpanded = true добавьте
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977435
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsExpanded = true разворачивает узел, не фокусирует этот элемент на форме, для того, чтобы его увидеть, приходится прокручивать скрол.

может надо как-то форму активной сделать?
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977446
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юля, больше я вам ничем помочь не смогу. я помню, что у меня прекрасно работало IsSelected, причем оно само прокручивало и разворачивало без дополнительных усилий. правда, я биндил на ViewModel.IsSelected
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977454
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно, спасибо Вам большое!!! Очень помогли :)
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977468
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соврал, биндю оба, сначала IsExpanded, потом IsSelected
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977505
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вестник, извините пожалуйста за нескоромный вопрос, а что такое биндить?
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977519
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юлия86Вестник, извините пожалуйста за нескоромный вопрос, а что такое биндить?
от слова binding (т.е. устанавливать привязку).
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977535
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum, понятно :),
а вот как забиндить TreeViewItem.IsSelected на Item.IsSelected непонятно,
не подскажите?
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977563
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юлия86Compositum, понятно :),
а вот как забиндить TreeViewItem.IsSelected на Item.IsSelected непонятно,
не подскажите?
Код: plaintext
<TreeViewItem IsSelected="{Binding ElementName = ИмяЭлемента, Path = Item.IsSelected}"/>
как-то так (навскидку).
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977578
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для mvvm это не так просто. я делал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
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();
        }
    }
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977585
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привязку лучше прописывать в xaml - чем меньше кода, тем лучше (имхо).
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977592
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в xaml вы не можете прописать использование TreeViewItem, если мне не изменяет память
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977652
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вестник, я TreeView1 определяю в xaml. Тогда где мне определить GetContainerForItemOverride()?
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977673
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все намного сложнее, чем кажется.
1. нужно научить ItemClass делать INotifyPropertyChanged
2. нужно в xaml включить сборку, где есть TreeViewEx
3. в xaml вместо TreeView использовать TreeViewEx
4. иметь ViewModel, которая вернет IEnumerable<ItemClass> Items, причем желательно с поддержкой INotifyCollectionChanged
5. TreeViewEx ItemsSource={Binding Items}
6. контрол, в котором сидит TreeView, надо привязать к ViewModel: View.DataContext = ViewModel

это очень схематично, кривая обучения жестковата, но потом все будет намного проще и быстрее. ищите по форуму учебные ссылки по mvvm
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36977769
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что связать выделеный item из ListView с выделеным item из TreeView всё же можно... Навеное через SelectedValuePath, хотя я пока не смог (связать два ListView легко, а вот с TreeView пока не вышло)...
Это можно скопипастить и запустить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
        Title="MainWindow" Height="350" Width="525">   
    <Window.DataContext>        
        <col:ArrayList>
            <sys:String>Мама</sys:String>
            <sys:String>Папа</sys:String>
            <sys:String>Вася</sys:String>
            <sys:String>Петя</sys:String>
        </col:ArrayList>        
    </Window.DataContext>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" VerticalAlignment="Stretch" Grid.RowSpan="2"/>
        <ListView x:Name="list1" ItemsSource="{Binding Path=.}" Grid.Column="2" Grid.Row="1" Background="Coral"/>
        <ListView x:Name="list2" ItemsSource="{Binding ElementName=list1, Path=ItemsSource}" SelectedItem="{Binding ElementName=list1, Path=SelectedItem, Mode=TwoWay}" Background="Coral"/>
        <TreeView x:Name="tree" ItemsSource="{Binding ElementName=list1, Path=ItemsSource}" SelectedValuePath="{Binding ElementName=list1, Path=SelectedItem, Mode=TwoWay}" Grid.Row="1" Background="Aqua"/>
    </Grid>
</Window>

...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36978381
Юлия86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем! Буду думать :)
...
Рейтинг: 0 / 0
TreeView изменение фокуса
    #36980411
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Юлия86Спасибо всем! Буду думать :)

что тут думать?! только MVVM решает все поставленные вопросы!
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeView изменение фокуса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]