在ControlTemplate中引用控件

时间:2010-06-23 10:36:22

标签: c# wpf resources controltemplate

如何在代码隐藏中构建我的构造函数,在下面的XAML中获取对外边框控件的引用?

<Window Template="{DynamicResource WindowTemplate}">
    <Window.Resources>      
        <ControlTemplate x:Key="WindowTemplate" TargetType="{x:Type Window}">
            <AdornerDecorator>
                <Border Name="OuterBorder" Background="Black" BorderBrush="Red" BorderThickness="1" CornerRadius="0">
                    <!-- Implementation here... -->
                </Border>
            </AdornerDecorator>
        </ControlTemplate>
    </Window.Resources>
</Window>

2 个答案:

答案 0 :(得分:4)

两种可能的解决方案:

解决方案1 ​​

在XAML中放置一个Loaded事件

<Border Name="OuterBorder" Loaded="Border_Loaded" ...

在后面的代码中将它存储在私有字段中:

private Border border;

void Border_Loaded(object sender, RoutedEventArgs e)
{
    this.border = (Border)sender;
}

OR:

解决方案2

覆盖窗口的OnApplyTemplate:

private Border border;

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    this.border = (Border) Template.FindName("OuterBorder", this);
}

答案 1 :(得分:1)

您可能想重新考虑您的方法。你想做什么?

通常,您不应该或不需要从代码隐藏中访问ControlTemplate的部分内容,因为您的模板就是 - 模板。这是控件的外观。您希望代码隐藏通常会影响控件的行为

例如,如果您在某些交互情况下尝试影响代码隐藏中边框的颜色,您真的想要添加一些(pre .Net4)触发器或(post .Net4)VisualStateManager到你的控制模板来管理你的控件的视觉状态。

相关问题