如何在代码隐藏中形成构造函数,在下面的XAML中获得对OuterBorder控件的引用?
<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>发布于 2010-06-23 18:40:15
两种可能的解决方案:
解决方案1
将加载的事件放入XAML中
<Border Name="OuterBorder" Loaded="Border_Loaded" ...并在代码中将其存储在私有字段中:
private Border border;
void Border_Loaded(object sender, RoutedEventArgs e)
{
this.border = (Border)sender;
}或者:
解决方案2
覆盖窗口的OnApplyTemplate:
private Border border;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
this.border = (Border) Template.FindName("OuterBorder", this);
}发布于 2010-06-23 18:42:17
你可能想重新考虑你的方法。你想做什么?
通常,您不应该希望或需要从您的代码后台访问ControlTemplate的一部分,因为您的模板只是一个模板。这就是控件的外观。您希望您的代码隐藏通常会影响控件的行为。
例如,如果您试图在某些交互场景中影响代码隐藏中边框的颜色,那么您确实希望在控件模板中添加一些(pre .Net4)触发器或(post .Net4) VisualStateManager来为您管理控件的可视状态。
https://stackoverflow.com/questions/3100856
复制相似问题