【问题标题】:Can I change property of element in DataTemplate, and how?我可以更改 DataTemplate 中元素的属性吗?如何更改?
【发布时间】:2012-07-20 23:46:08
【问题描述】:

我可以更改 DataTemplate 中元素的属性吗? 例如:

<phone:PhoneApplicationPage.Resources>       
        <DataTemplate x:Key="LawItemTemplate">
            <StackPanel>
                <TextBlock
                    Text="{Binding Name}" 
                    TextWrapping="Wrap"/>
            </StackPanel>
        </DataTemplate>
</phone:PhoneApplicationPage.Resources>

我想更改 TextBlock FontSize,但如何在 DataTemplate 中访问 TextBock?

不适合创建加载事件并按发件人获取元素的选项,因为这些更改在视觉上对用户来说是显而易见的。 谢谢。

【问题讨论】:

  • 您想在运行时更改它吗? “因为这些变化在视觉上对用户来说是显而易见的”你能解释更多吗?
  • 信息加载时,FontSize/Color一开始是标准的,半秒后改变。它在视觉上很明显。

标签: windows-phone-7 xaml resources datatemplate


【解决方案1】:

首先获取ListBoxitem的根元素

ListBoxItem item = listbox.ItemContainerGenerator.ContainerFromIndex(index) as ListBoxItem;

然后在元素树中搜索 TextBlock 并多次调用 .Children() 或将 Name 提供给 TextBlock 并按名称搜索

【讨论】:

    【解决方案2】:

    如果您想更改 DataTemplate 中的某些内容,只需将其绑定到数据的属性并进行更改即可。如果可能,应避免弄乱控件。

    【讨论】:

      【解决方案3】:

      我不确定这是否是您的意思,但您可以使用Triggers。

      像这样:

      <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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 2022-07-19
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多