【问题标题】:WPF: How do I get a reference to a styled window control in code behind?WPF:如何在后面的代码中获取对样式化窗口控件的引用?
【发布时间】:2011-08-16 01:26:02
【问题描述】:

我有一个定义了样式的窗口:

<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 将引用传递给各种控件时访问窗口属性。但是,它不提供通过窗口引用访问样式中定义的控件,因为它们不存在。

那么,通过样式中定义的代码引用控件的最佳方式是什么?我不想遍历树来找到它们,但你必须这样做......

【问题讨论】:

    标签: wpf reference styles code-behind


    【解决方案1】:

    我假设想要访问最初在您的窗口的 ControlTemplate 中定义的控件。在这种情况下,您最好的选择是使用VisualTreeHelper.GetChild() 此外,使用FrameworkElement.TemplatedParent 您可以检查孩子是否是从 ControlTemplate 创建的。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多