【问题标题】:Programmatically change ListBox DataTemplate以编程方式更改 ListBox DataTemplate
【发布时间】:2014-03-10 03:16:34
【问题描述】:

嘿伙计们,如果有人能告诉我如何以编程方式更改 ListBoxDataTemplate,我只是在徘徊。所以基本上我有这个DataTemplate:

<DataTemplate x:Key="DataTemplate1">
        <Grid toolkit:TiltEffect.IsTiltEnabled="True" d:DesignWidth="446" Width="446" d:DesignHeight="108" Height="108">
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountTitle}" VerticalAlignment="Top" Width="456" HorizontalAlignment="Left" Height="40" FontFamily="Segoe WP" FontSize="28" />
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountUsername}" VerticalAlignment="Top" Width="456" Margin="0,33,0,0" HorizontalAlignment="Left" Height="35" FontFamily="Segoe WP" FontSize="24" />
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountWebsite}" VerticalAlignment="Top" Width="456" Margin="0,61,0,0" HorizontalAlignment="Left" Height="35" FontFamily="Segoe WP" FontSize="24" />
            <TextBlock TextWrapping="NoWrap" Text="{Binding FolderID}" VerticalAlignment="Top" Width="456" Margin="0,96,0,-13" HorizontalAlignment="Left" Height="35" FontFamily="Segoe WP" FontSize="24" Opacity="0" Visibility="Collapsed" />
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountDate}" VerticalAlignment="Top" Margin="0,38,0,0" FontFamily="Segoe WP" FontSize="20" TextAlignment="Right" HorizontalAlignment="Right" />
        </Grid>
</DataTemplate>

现在,当用户在设置页面上设置某个设置时,ListBox DataTemplate 必须更改为:

<DataTemplate x:Key="DataTemplate1">
        <Grid toolkit:TiltEffect.IsTiltEnabled="True" d:DesignWidth="446" Width="446" d:DesignHeight="108" Height="108">
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountTitle}" VerticalAlignment="Top" Width="456" HorizontalAlignment="Left" Height="40" FontFamily="Segoe WP" FontSize="28" />
            <TextBlock TextWrapping="NoWrap" Text="{Binding AccountDate}" VerticalAlignment="Top" Margin="0,38,0,0" FontFamily="Segoe WP" FontSize="20" TextAlignment="Right" HorizontalAlignment="Right" />
        </Grid>
</DataTemplate>

可以这样做吗?如果是这样,请有人帮助我。 谢谢!

【问题讨论】:

  • 我会使用 DataTriggers 来执行此操作,但我不确定 windows phone 8 是否支持它们。如果没有,您可能必须使用自定义转换器。

标签: c# xaml windows-phone-8 listbox datatemplate


【解决方案1】:

其中一种方法是在页面资源中定义两个DataTemplates。然后您可以在运行时将 ListBox 的 ItemTemplate 设置为这两者中的任何一个:

MyListBox.ItemTemplate = (DataTemplate)FindResource("DataTemplate2"); 

更新:

由于FindResource() 功能在 Windows Phone 页面中不可用,并且经 OP 确认,此功能适用于他,因此请使用以下代码而不是上面的代码:

MyListBox.ItemTemplate = (DataTemplate)this.Resources["DataTemplate2"]; 

【讨论】:

  • 玩过之后,ListBoxAll.ItemTemplate = (DataTemplate)this.Resources["DataTemplate2"]; 工作了。 FindResource 不可用,但感谢您指出正确的方向:D
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2015-08-16
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多