0 votes

WPF : Comment obtenir une référence à un contrôle de fenêtre stylisée dans le code derrière ?

J'ai une fenêtre définie avec un style :

<Window x:Class="winBorderless"
        x:Name="winBorderless"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Local="clr-namespace:WindowStyle"
        Style="{StaticResource Window_Cartesia}"
        WindowStartupLocation="CenterScreen"
        BorderThickness="1"
        BorderBrush="#FF9CAAC1"
        Margin="5"
        Title="[Document Title]">

et le style défini dans un dictionnaire au niveau de l'application :

 <Style x:Key="Window_Cartesia" TargetType="{x:Type Window}">

  <Setter Property="WindowStyle" Value="None"/>
  <Setter Property="AllowsTransparency" Value="True"/>
  <Setter Property="Background" Value="Transparent"/>

  <EventSetter Event="Loaded" Handler="Loaded"/>  
  <EventSetter Event="PreviewKeyDown" Handler="Preview_KeyDown"/>
  <EventSetter Event="MouseMove" Handler="FullScreen_MouseMove"/>

  <Setter Property="Template">

Dans le code derrière, j'ai une référence à l'instance de la fenêtre :

 Win = DirectCast(sender, winBorderless)

Cela permet d'accéder aux propriétés de la fenêtre lorsque les EventSetters transmettent des références aux différents contrôles. Cependant, cela ne permet pas d'accéder aux contrôles définis dans le style par le biais de la référence à la fenêtre, car ils n'y existent pas.

Alors, quelle est la meilleure façon de référencer un contrôle par le biais du code derrière qui est défini dans le style. Je préférerais ne pas avoir à itérer les arbres pour les trouver, mais il faut le faire.....

1voto

bitbonk Points 14057

Je suppose que vous voulez accéder aux contrôles qui ont été définis à l'origine dans le ControlTemplate de votre fenêtre. Dans ce cas, votre meilleure chance est d'utiliser VisualTreeHelper.GetChild() En outre, l'utilisation de Elément-cadre.ModèleParent vous pouvez vérifier si l'enfant a été créé à partir d'un ControlTemplate.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X