错误:当前上下文中不存在名称“tBox”。
XAML:
<ItemsControl Name="itemsControl">
<ItemsControl.Template>
<ControlTemplate>
<WrapPenel>
<ItemsPresenter/>
</WrapPenel>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Name="tBox" Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C#:
tBox.Background=Brushes.White; // Error: The name 'tBox' does not exist in the current context.
如何访问控件?
答案 0 :(得分:1)
您命名为tBox的TextBlock位于DataTemplate中。模板内的控件位于不同的名称范围内,因此您无法通过其名称在代码隐藏中访问它。我不确定,但您可以通过ItemTemplate属性获取它并将其转换为TextBlock。或者,您可以在代码隐藏中添加一个表示背景的属性,并在TextBlock的Background属性上使用绑定。希望这会有所帮助。
答案 1 :(得分:0)
在TextBlock
:{/ p>中的DataTemplate
上进行设置
<DataTemplate>
<TextBlock Name="tBox" Background="White" Text="{Binding Name}"></TextBlock>
</DataTemplate>
或者,如果您只想在特定条件下设置Background
,请考虑使用Triggers
:
<DataTemplate>
<TextBlock Name="tBox" Text="{Binding Name}"></TextBlock>
<DataTemplate.Triggers>
<Trigger SourceName="tBox" Property="IsMouseOver" Value="True">
<Setter TargetName="tBox" Property="Background" Value="White" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
有关如何使用触发器的更多信息,请访问:A Guided Tour of WPF - Part 4 (Data Templates and Triggers)
答案 2 :(得分:0)
我没有尝试,但也许这里的答案有效:
Access a control from within a DataTemplate with its identifying name
使用类似的东西:
var tbUserIcon= (TextBlock)checkBox.Template.FindName("tbUserIcon", checkBox);
但我认为这种方式根本不方便,特别是如果有很多控件必须这样做,并且在实时编写代码时无法通过intellisense进行检查。
答案 3 :(得分:-1)
this.Background = Brushes.White; (假设其代码在控件后面)?
答案 4 :(得分:-1)
由于Background是依赖属性,因此您必须使用
tBox.SetValue(BackgroundProperty,new SolidBrush(Color.White));