我可以在DataTemplate中更改元素的属性吗? 例如:
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="LawItemTemplate">
<StackPanel>
<TextBlock
Text="{Binding Name}"
TextWrapping="Wrap"/>
</StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
我想更改TextBlock FontSize,但是如何在DataTemplate中访问TextBock?
创建Load Event并通过发件人获取元素的选项不适合,因为用户可以直观地看到这些更改。 感谢。
答案 0 :(得分:0)
首先获取ListBox
item
ListBoxItem item = listbox.ItemContainerGenerator.ContainerFromIndex(index) as ListBoxItem;
然后在元素树中搜索TextBlock
,多次调用.Children()
或将Name
提供给TextBlock
并按名称搜索
答案 1 :(得分:0)
如果您想要更改DataTemplate
中的某些内容,只需将其绑定到数据中的某个属性,然后进行更改即可。如果可能的话,应该避免使用控件。
答案 2 :(得分:0)
我不确定这是不是你的意思,但你可以使用Trigger
s。
像这样:
<DataTemplate x:Key="LawItemTemplate">
<StackPanel>
<TextBlock x:Name="NameHolder"
Text="{Binding Name}"
TextWrapping="Wrap"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding SomeProp}" Value="SomeValue">
<Setter TargetName="NameHolder" Property="FontSize" Value="18"/>
</DataTrigger>
</DataTemplate.Triggers>
</StackPanel>
</DataTemplate>
当然,如果您需要监听视觉祖先的属性更改,可以在触发器的绑定中使用RelativeSource
。