首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对ControlTemplate内部控件的引用

对ControlTemplate内部控件的引用
EN

Stack Overflow用户
提问于 2010-06-23 18:36:22
回答 2查看 2.7K关注 0票数 5

如何在代码隐藏中形成构造函数,在下面的XAML中获得对OuterBorder控件的引用?

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-23 18:40:15

两种可能的解决方案:

解决方案1

将加载的事件放入XAML中

代码语言:javascript
复制
<Border Name="OuterBorder" Loaded="Border_Loaded" ...

并在代码中将其存储在私有字段中:

代码语言:javascript
复制
private Border border;

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

或者:

解决方案2

覆盖窗口的OnApplyTemplate:

代码语言:javascript
复制
private Border border;

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

Stack Overflow用户

发布于 2010-06-23 18:42:17

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

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

例如,如果您试图在某些交互场景中影响代码隐藏中边框的颜色,那么您确实希望在控件模板中添加一些(pre .Net4)触发器或(post .Net4) VisualStateManager来为您管理控件的可视状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3100856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档