Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Триггер перестает работать, WPF


Автор: Anyone 16.10.2009, 21:45
Вот имею такой шаблон:
Код

    <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" почему-то перестает работать. В чем проблема и как лучше всего ее решить?

Автор: math64 17.10.2009, 12:18
Локальное значение свойства приоритетнее всего, в том числе и триггеров.
Можно предложить такое решение (возможно не лучшее и не проверял, будет ли работать):
Добавить невидимый элемент, и програмно изменять его прозрачность. Прозрачность коннектора привязать к прозрачности этого элемента.
Или добавить ещё один триггер (если значение, которое нужно установить известно в xaml).

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

Автор: math64 17.10.2009, 19:20
Можешь программно изменять свойство Tag (типа object) -так что ему можно присвоить любое значение. На него и можно повесить триггеры.

Автор: Anyone 17.10.2009, 20:56
Я не люблю использовать свойство Tag, если есть возможность для этих целей добавить специальное свойство, хотя иногда именно так и поступаю, когда совсем лень програмить  smile 

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

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

math64, 
спасибо за как всегда быстрый и как всегда правильный ответ  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)