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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Триггер перестает работать, WPF, Если программно изменить свойство 
V
    Опции темы
Anyone
Дата 16.10.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот имею такой шаблон:
Код

    <ControlTemplate x:Key="InputParameterTemplate" TargetType="{x:Type local:Parameter}">
        <Grid>
            <local:Connector x:Name="PART_Connector" Opacity="0.0"  Width="10" Height="10"  HorizontalAlignment="Left" VerticalAlignment="Center" Margin="-30,0,0,0">
                <local:Connector.RenderTransform>
                    <TranslateTransform X="-5"/>
                </local:Connector.RenderTransform>
            </local:Connector>
            <Label Content="{TemplateBinding Caption}" HorizontalAlignment="Left" VerticalAlignment="Center" Style="{StaticResource ParameterStyle}" Margin="1,0,0,0"/>
            <Line SnapsToDevicePixels="True" VerticalAlignment="Center" HorizontalAlignment="Left" X1="0" Y1="0" X2="30" Y2="0" Margin="-31,1,0,0" Stroke="Black" StrokeThickness="2"/>
            <Ellipse x:Name="EllipseReverse" Visibility="Hidden" VerticalAlignment="Center" HorizontalAlignment="Left" Stroke="Black" Fill="White"
                                 StrokeThickness="2" Width="9" Height="9" Margin="-5,0,0,0"/>
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger SourceName="PART_Connector" Property="IsMouseOver" Value="True">
                <Setter TargetName="PART_Connector" Property="Opacity" Value="1.0"/>
            </Trigger>
            <Trigger Property="Switch" Value="True">
                <Setter TargetName="EllipseReverse" Property="Visibility" Value="Visible"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

После того как я програмно задам свойство Opacity для local:Connector x:Name="PART_Connector", то триггер SourceName="PART_Connector" Property="IsMouseOver" почему-то перестает работать. В чем проблема и как лучше всего ее решить?
PM MAIL   Вверх
math64
Дата 17.10.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Локальное значение свойства приоритетнее всего, в том числе и триггеров.
Можно предложить такое решение (возможно не лучшее и не проверял, будет ли работать):
Добавить невидимый элемент, и програмно изменять его прозрачность. Прозрачность коннектора привязать к прозрачности этого элемента.
Или добавить ещё один триггер (если значение, которое нужно установить известно в xaml).
PM   Вверх
Anyone
Дата 17.10.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Жаль, конечно, что триггер перестает работать после того как программно изменяется свойство, которое он изменяет.
У меня есть другое предложение решение проблемы - добавить свойство типа bool и триггер повесить на него. А вот значение этого свойства придется менять программно, в том числе добавить обработчики MouseEnter и MouseLeave.
PM MAIL   Вверх
math64
Дата 17.10.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Можешь программно изменять свойство Tag (типа object) -так что ему можно присвоить любое значение. На него и можно повесить триггеры.
PM   Вверх
Anyone
Дата 17.10.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я не люблю использовать свойство Tag, если есть возможность для этих целей добавить специальное свойство, хотя иногда именно так и поступаю, когда совсем лень програмить  smile 
PM MAIL   Вверх
Anyone
Дата 18.10.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Anyone @  17.10.2009,  19:02 Найти цитируемый пост)
У меня есть другое предложение решение проблемы - добавить свойство типа bool и триггер повесить на него. А вот значение этого свойства придется менять программно, в том числе добавить обработчики MouseEnter и MouseLeave.

Может быть и не самое лучшее решение, но так работает и ставлю на этом точку.

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


 




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


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

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