WPF изменить ItemsPanel и ItemTemplate в коде позади - PullRequest
1 голос
/ 10 апреля 2010

У меня есть следующий список в XAML:

<ListView Name="ListViewBack"
          Margin="3"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ItemsPanel="{StaticResource IconListPanelTemplate}"
          ItemTemplate="{StaticResource IconListDataTemplate}">
</ListView>

Теперь я хотел бы иметь возможность изменить ItemsPanel и ItemTemplate из списка в версию Grid. Я пробовал это, используя следующий код:

ListViewBack.ItemsPanel = Resources["IconGridPanelTemplate"] as ItemsPanelTemplate;
ListViewBack.ItemTemplate = Resources["IconGridDataTemplate"] as DataTemplate;

Но ничего не происходит, когда оправдан.

Есть идеи?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 11 апреля 2010

Ваша очевидная проблема в том, что вы используете Resources[] вместо FindResource(). В общем случае Resources[] будет работать только в том случае, если ваш ресурс находится в словаре this.Resources, а не где-либо еще.

Вот как бы я переписал ваши две строки кода:

ListViewBack.ItemsPanel = (ItemsPanelTemplate)ListViewBack.FindResource("IconGridPanelTemplate");
ListViewBack.ItemTemplate = (DataTemplate)ListViewBack.FindResource("IconGridDataTemplate");

На самом деле, я бы с большей вероятностью использовал триггеры или использовал DynamicResource и менял словари ресурсов для этой цели, но это уже другая история.

Обратите внимание, что я позвонил ListViewBack.FindResource() вместо FindResource(). Это в случае, когда IconGridPanelTemplate переопределяется в словаре ресурсов ниже уровня UserControl. Если это никогда не будет возможно, вы можете просто позвонить FindResource().

0 голосов
/ 12 апреля 2010

Вам нужно стилизовать свой ListView.View, а не сам ListView. Посмотрите документацию для ViewBase Class для примера.

...