WPF: 在某个控件的触发器中更改另一个控件的属性

8

这是我的文本块。

    <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"。
我该怎么做呢?

那个图片(或控件)在哪里? - Mario Vernari
基本上,我想在同一窗口中更改另一个控件的属性。但同时,该控件也可以放置在应用程序资源、窗口资源和控件资源中。 - mjk6026
1个回答

13

你需要以某种方式聚合源和目标。

如果你有多个类似的块,可以创建包含超链接/文本块和图像的自定义控件。这是首选方式。

如果你不喜欢这种方法,可以按照以下方式创建一个“临时”的匿名控件:

<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" />

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接