Как мне создать ResourceDictionary для моего ItemContainerStyle?

#c# #.net #wpf #mvvm #resourcedictionary

#c# #.net #wpf #mvvm #resourcedictionary

Вопрос:

Итак, у меня есть этот ListView в моем XAML, который становится довольно большим, я хотел бы отделить часть выполненного стиля от ResourceDictionary.

Вот как это выглядит прямо сейчас.

 <ListView Grid.Row="1"
          x:Name="NotesListView"
          ItemsSource="{Binding NotesViewModel.Notes}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>

    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" 
                    Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>

    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Width="100"
                  Height="100"
                  Background="{Binding Color}">
                <StackPanel Margin="10">
                    <TextBlock Text="{Binding Title}"/>
                    <TextBlock Text="{Binding Description}"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
  

Я хотел бы поместить эту часть в ResourceDictionary

 <ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <UniformGrid Columns="3"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" 
                Value="Stretch"/>
    </Style>
</ListView.ItemContainerStyle>
  

Но я не знаю, как это сделать.
Это все, что у меня есть

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="ListView">

    </Style>

</ResourceDictionary>
  

И внутри Style я не могу добавить ListView.ItemContainerStyle
Итак, как я могу правильно разделить его на ResourceDictionary?

Ответ №1:

Словарь ресурсов

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ItemsPanelTemplate x:Key="lstViewItemsPanelTemplate">
        <UniformGrid Columns="3"/>
    </ItemsPanelTemplate>
    <Style TargetType="ListViewItem" x:Key="lstViewItemContainerStyle">
        <Setter Property="HorizontalContentAlignment" 
                Value="Stretch"/>
    </Style>
    <DataTemplate x:Key="lstViewItemTemplate">
        <Grid Width="100"
              Height="100"
              Background="{Binding Color}">
            <StackPanel Margin="10">
                <TextBlock Text="{Binding Title}"/>
                <TextBlock Text="{Binding Description}"/>
            </StackPanel>
        </Grid>
    </DataTemplate>
</ResourceDictionary>
  

Просмотр списка

 <ListView ItemsPanel="{StaticResource lstViewItemsPanelTemplate}"
          ItemContainerStyle="{StaticResource lstViewItemContainerStyle}"
          ItemTemplate="{StaticResource lstViewItemTemplate}"/>
  

или

Вы также можете определить глобальный Style в ResourceDictionary.xaml виде,

 <Style TargetType="ListView">
    <Setter Property="ItemsPanel" Value="{StaticResource lstViewItemsPanelTemplate}"/>
    <Setter Property="ItemContainerStyle" Value="{StaticResource lstViewItemContainerStyle}"/>
    <Setter Property="ItemTemplate" Value="{StaticResource lstViewItemTemplate}"/>
</Style>