2011-08-06 8 views
7

Oto mój blok tekstu.WPF: Wstrzymywanie właściwości innej kontrolki w wyzwalaczu kontrolki

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

Lubię tworzyć kod xaml, który może zmienić inny element kontrolny, np. "ImgAnother".

Jak mogę to zrobić?

+0

Gdzie jest ten obraz (lub kontrola, którą masz na myśli)? –

+0

Zasadniczo chcę zmienić proeprty innego kontrolera w tym samym oknie. Ale także kontrola może umieścić w zasobach aplikacji, zasobach okna, zasobach kontrolnych. – mjk6026

Odpowiedz

12

Musisz agregować źródło i cel w jakiś sposób.

Można utworzyć niestandardowy formant zawierający hiperłącze/blokadę tekstu i obraz. To jest preferowany sposób, jeśli masz kilka bloków, które zachowują się w takim przykładzie.

Jeśli tego nie lubisz. Możesz utworzyć "tymczasową" anonimową kontrolę w następujący sposób:

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

Powyższe xaml będzie znajdować się w zasobach Twojego Window.

UWAGA: to trochę jak ścieżka do naśladowania, niż w pełni funkcjonalny fragment!

W organizmie, można skierować kontrolę w taki sposób:

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

Nadzieję, że to pomaga.

Powiązane problemy