1

我现在尝试了一段时间并在网上搜索但没有成功......现在我敢自己在stackoverflow上提问。

因此,目的是将 a 的 theItemContainerStyle和 theContentTemplate的定义分开ListBoxItem。我已经ListBoxItemStyle在 aResourceDictionary和两个不同DataTemplatesWindow.Resources.

我现在喜欢ListBoxItem根据 中定义的样式设置样式,并使用触发器 ( )ResourceDictionary更改样式。DataTemplateIsMouseOver

我的(不工作)代码看起来像这样:

<ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="20,60,10,10"
         Grid.Row="1" Grid.Column="0"
         PreviewMouseMove="DragMove_PreviewMouseMove"
         PreviewMouseLeftButtonDown="Drag_PreviewMouseLeftButtonDown"
         ItemsSource="{Binding Persons}" VerticalContentAlignment="Center"
         Style="{StaticResource DefaultListBoxStyle}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Style" Value="{StaticResource DefaultListBoxItemStyle}"/>
            <Setter Property="ContentTemplate" Value="{StaticResource PersonsListBoxItemTemplate_default}"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="ContentTemplate" Value="{StaticResource PersonsListBoxItemTemplate_infoButtons}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

其中DefaultListBoxStyle是 中定义的样式ResourceDictionaryPersonsListBoxItemTemplate_default&PersonsListBoxItemTemplate_infoButtons是 中定义的 DataTemplates Window.Resources

现在我得到一个错误,样式对象不能对其所属对象的样式属性产生影响。

我尝试了不同的方法,但没有成功......我也尝试过先定义样式然后更改模板,但它也不起作用。

感谢大家的帮助!

4

1 回答 1

1

所以你不能用 Setter 在 Style 中设置 Style 属性。为此,您需要使用 BasedOn:

<Style TargetType="ListBoxItem" BasedOn="{StaticResource DefaultListBoxItemStyle}">
    <Setter ... />
</Style>
于 2016-09-05T08:10:15.360 回答