【发布时间】:2014-02-24 01:15:18
【问题描述】:
首先,问题的核心:如果一个元素通过样式触发器指定为 ContentControl 的内容,我似乎无法通过名称找到它。
现在,了解更多细节:我有一个面板,其布局和功能根据其数据上下文变化很大,这是来自错误库的错误。当该错误为空时,它是一个搜索表单,当它为非空时,它是该错误属性的简单查看器。 XAML 然后看起来像:
<ContentControl DataContext="...">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content">
<Setter.Value>
...
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Content">
<StackPanel>
<TextBox Name="Waldo"/>
<Button .../>
</StackPanel>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
当用户单击文本框旁边的按钮时,我会在后面的代码中收到回调。从那时起,我希望能够访问文本框的各种属性。问题是,Waldo 在哪里? :)
在后面的代码中,我尝试了以下几种变体,但都收效甚微:
this.FindName("Waldo"); // Always returns null
我看到很多关于这个主题的讨论,因为它与templates 相关,但与直接使用触发器设置内容无关。也许是因为我这样做违反了各种最佳实践:)
谢谢!
【问题讨论】:
标签: c# wpf xaml triggers contentcontrol