WPF: Как получить ссылку на стилизованный элемент управления окном в коде позади? - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть окно, определенное со стилем:

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

и стиль, определенный в словаре уровня приложения:

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

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

 Win = DirectCast(sender, winBorderless)

Это позволяет получить доступ к свойствам окна, когда EventSetters передает ссылки на различные элементы управления. Однако он не обеспечивает доступ к элементам управления, определенным в стиле, через ссылку на окно, поскольку их там нет.

Итак, что является лучшим способом ссылки на элемент управления через код, который определен в стиле. Я бы предпочел не повторять деревья, чтобы найти их, но ты должен сделать ....

1 Ответ

1 голос
/ 25 февраля 2010

Я предполагаю, что хотите получить доступ к элементам управления, которые изначально были определены в шаблоне Control of the Window. В этом случае лучше всего использовать VisualTreeHelper.GetChild () Кроме того, используя FrameworkElement.TemplatedParent , вы можете проверить, был ли дочерний элемент создан из ControlTemplate.

...