无法更改wpf中的选定列表项样式

时间:2013-06-02 15:49:59

标签: wpf xaml listbox datatemplate

我试图在dataTemplate中更改列表项外观,但是我在更改所选项目外观方面遇到了问题。我发现了这个问题:Change WPF DataTemplate for ListBox item if selected

我尝试在答案中创建类似的代码:

<DataTemplate x:Key="NoteTemplate">
        <Border Margin="5" BorderThickness="1" BorderBrush="Transparent" Background="#F3EBC2" CornerRadius="4">
            <Grid Margin="3" Width="395" MaxHeight="40">
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition/>                        
                </Grid.RowDefinitions>
                <Grid Row="0" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" FontSize="15" FontFamily="Consolas" FontWeight="Bold" Text="{Binding Path=tytul}"/>
                    <TextBlock Grid.Column="1" FontSize="13" FontFamily="Consolas" FontStyle="Italic" HorizontalAlignment="Right" Text="{Binding Path=data_dodania}"/>
                </Grid>
                <TextBlock Grid.Row="1" FontSize="13" FontFamily="Consolas" Text="{Binding Path=tresc}"/>
            </Grid>
        </Border>
    </DataTemplate>



    <Style TargetType="{x:Type ListBoxItem}" x:Key="ListBoxItem">
        <Setter Property="ContentTemplate" Value="{StaticResource NoteTemplate}" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="ContentTemplate" Value="{StaticResource NoteTemplate}" />
            </Trigger>
        </Style.Triggers>
    </Style>

(我将相同的模板放在触发器中以检查它是否有效)

<ListBox Name="listBoxNotatki" Margin="10" ItemContainerStyle="{StaticResource ListBoxItem}" Background="Beige" BorderBrush="Orange" BorderThickness="3"/>

但后来我收到了这个错误:

“无法将'MS.Internal.NamedObject'类型的对象强制转换为'System.Windows.DataTemplate'。”

当我将StaticResource更改为DynamicResorce时,我摆脱了这个错误但是我的风格中的触发器不起作用(所选项目看起来就像开头一样)。

1 个答案:

答案 0 :(得分:0)

ListBox 控件上,将 ItemTemplate 设置为“NoteTemplate”。 ListBox 知道它的 SelectedItem

在您的情况下,我会编写一个 DataTemplateSelector ,并在列表框 ItemTemplateSelector 中使用它来查看前后。< / p>

这篇文章很好地解释了它: http://codepb.com/datatemplateselector-in-xaml-versatile-xaml-controls/