Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наверное биндинг визуального состояния 
:(
    Опции темы
hexzo
Дата 27.9.2011, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



У меня есть:
стиль_с_шаблоном_для_RootDrive.

Код

<ListView ItemsSource="{ресурс для кнопок}">
здесь отображается группа кнопок
<ListView>



Группа кнопок берётся из соответствующего ресурса List<RootDrive>
Интерпретирует экземпляр RootDrive как кнопку - стиль_с_шаблоном_для_кнопки.

Мне нужно что-бы:
При нажатии любая кнопка переключала все соседние кнопки в ненажатое визуальное состояние, а сама переключалась в нажатое и оставалась в нём.

Как это решить наименее кровавым способом? Может можно как-нибудь визуальное состояние забиндить на что-нибудь, что бы я чего-нибудь изменил в связанном с кнопкой объекте и соответственно изменилось состояние кнопки?  smile 

Это сообщение отредактировал(а) hexzo - 27.9.2011, 16:03
PM MAIL   Вверх
Hobotanius
Дата 27.9.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Я решал похожую задачу, делал подобие панели задачь, делал через события окон связанных с кнопками. Думаю что сделал не не идиально поэтому своё решение не предлагаю. Однако, я использовал не Button, а ToggleButton. Этот вид кнопки вжимается и остаётся вжатым пока не жмякнешь повторно. Кнопка эта определена в пространстве имён - System.Windows.Controls.Primitives.
PM MAIL   Вверх
Gvozdin
Дата 27.9.2011, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



Действительно тут подойдет ToggleButton.

1. Если просто нужно дать возможность выбирать один элемент из списка, то это все уже есть и остается только настроить шаблоны отображения:
Код

            <ListView SelectionMode="Single">
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Style.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="Red"/>
                                <Setter Property="ContentTemplate">
                                    <Setter.Value>
                                        <DataTemplate>
                                            <ToggleButton IsHitTestVisible="False" Content="{Binding}" IsChecked="True"/>
                                        </DataTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </Style.Triggers>
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <Button IsHitTestVisible="False" Content="{Binding}" IsChecked="False"/>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>


Тоесть если ListViewItem выбран то рисовать его как нажатую кнопку, если нет то как просто кнопку.

2. Сделать это в стиле MVVM. у RootDrive сделать признак IsSelected, который забайндить в шаблоне на ToggleButton.IsChecked. А уже управлять этим IsSelected програмно.

Это сообщение отредактировал(а) Gvozdin - 27.9.2011, 22:32
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
hexzo
Дата 28.9.2011, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Спасибо всем, короче я просто передаю в обработчике кнопки кнопку в связанный с ней ресурс. Всё остальное делается элементарно.

Говнокод:
Код

if (((e.OriginalSource as Button).DataContext as RootDrive).viewdestination_prop == null)
   ((e.OriginalSource as Button).DataContext as RootDrive).viewdestination_prop = (e.OriginalSource as Button);     
((e.OriginalSource as Button).DataContext as RootDrive).selectDrive();


P.S. У меня всё идёт к тому что из каждого экземпляра каждого объекта можно добраться до любого экземпляра любого объекта. Это нормально?

Это сообщение отредактировал(а) hexzo - 28.9.2011, 08:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.