Как загрузить разные шаблоны в зависимости от ввода пользователя в поле списка - PullRequest
1 голос
/ 10 июня 2011

Я пытаюсь загрузить шаблон для отображения списка. Здесь у меня есть два разных шаблона

и мне нужно загрузить один шаблон в зависимости от значения конфигурации. Сначала дать некоторое представление

это как загрузить разные шаблоны для одного списка.

Вот мой код XAML

<Window x:Class="DynamicTemplate.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:DynamicTemplate"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
    <ResourceDictionary>           
     <DataTemplate x:Key="LargeTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Large Template" FontSize="10" Foreground="Black"/>
        </Grid>
    </DataTemplate>
    <DataTemplate x:Key="SmallTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Small template" FontSize="10" Foreground="Blue"/>
        </Grid>
    </DataTemplate>            
        </ResourceDictionary>
</Window.Resources>
<ListBox x:Name="MyListBox" Width="200" Height="200" ItemsSource="{Binding Path=list1}" >
    <ListBox.Style>
        <Style TargetType="ListBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=size}" Value="Small">
                    <Setter Property="ListBox.ItemTemplate" Value="{StaticResource SmallTemplate}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=size}" Value="Large">
                    <Setter Property="ListBox.ItemTemplate" Value="{StaticResource LargeTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>
</Window>

Пожалуйста, попробуйте помочь мне, мне нужно сделать это сейчас. пожалуйста, проверьте код и ответьте мне в ближайшее время. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Вместо триггеров стилей в xaml я использовал подобный метод FindResource в моем файле .cs

Вот мой код

  string alertTemplateStyle = ConfigurationManager.AppSettings["AlertTemplateStyle"];
        //it will return the value of my configuration file either 1 or 2 depending 
        // upon user requirement

        DataTemplate template = null;

        int size = int.Parse(alertTemplateStyle);

        if (size == 1)
        {
            template = this.FindResource("SmallTemplate") as DataTemplate;
        }
        else
        {
            template = this.FindResource("LargeTemplate") as DataTemplate;
        }

        AlertsListBox.ItemTemplate = template;//AlertsListBox is my xaml listbox name
0 голосов
/ 10 июня 2011

Что не так с вашим текущим предложением?

Полагаю, вы могли бы использовать DataTemplateSelector для достижения чего-то похожего, хотя я думаю, что DataTemplateSelector обычно переключает используемый DataTemplate на основе самих элементов.

// * Даниель 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...