WPF: изменение свойства другого элемента управления в триггере какого-либо элемента управления - PullRequest
7 голосов
/ 06 августа 2011

Вот мой текстовый блок.

    <Image x:Name:imgAnother/>

    <TextBlock>
        this is my text block
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="TextDecorations" Value="None"/>
                <Style.Triggers>
                    <Trigger Property="TextBlock.IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="RoyalBlue"/>
                        <!--I like to insert a code at here that changes another control's property...-->
                    </Trigger>
                    <Trigger Property="TextBlock.IsMouseOver" Value="False">
                        <Setter Property="Foreground" Value="#FF808080"/>
                        <!--..and this line too.-->
                   </Trigger>
                </Style.Triggers>                    
            </Style>
        </TextBlock.Style>
    </TextBlock>

Мне нравится создавать код xaml, который может изменять свойства другого элемента управления, например "imgAnother".

Как я могу это сделать?

1 Ответ

12 голосов
/ 06 августа 2011

Вы должны каким-либо образом объединить источник и цель.

Вы можете создать либо пользовательский элемент управления, содержащий как гиперссылку / текстовый блок, так и изображение.Это предпочтительный способ, если у вас есть несколько блоков, которые ведут себя в таком примере.

Если вам не нравится это.Вы можете создать «временный» анонимный элемент управления следующим образом:

<ControlTemplate x:Key="myCtl" TargetType="ContentControl">
  <StackPanel>
    <Image x:Name="img"/>
    <ContentPresenter x:Name="ctr" />
  </StackPanel>

  <ControlTemplate.Triggers>
                    <Trigger SourceName="ctr" Property="IsMouseOver" Value="True">
                        <Setter TargetName="ctr" Property="Foreground" Value="RoyalBlue"/>
                        <!--I like to insert a code at here that changes another control's property...-->
                    </Trigger>
                    <Trigger SourceName="ctr" Property="IsMouseOver" Value="False">
                        <Setter TargetName="ctr" Property="Foreground" Value="#FF808080"/>
                        <!--..and this line too.-->
                   </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

Вышеупомянутый xaml будет находиться в ресурсах вашего окна.

ПРИМЕЧАНИЕ: это скорее трек, по которому нужно следовать, чем полностьюфункциональный фрагмент!

В теле вы можете ссылаться на элемент управления следующим образом:

<ContentControl Template="{StaticResource myCtl}" Content="this is my text block" />

Надеюсь, это поможет.

...