我可以在DataTemplate中更改元素的属性,以及如何?

时间:2012-07-22 13:32:13

标签: windows-phone-7 xaml resources datatemplate

我可以在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并通过发件人获取元素的选项不适合,因为用户可以直观地看到这些更改。 感谢。

3 个答案:

答案 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