gpt4 book ai didi

WPF - ListBox 在绑定(bind) ItemsSource 时忽略样式

转载 作者:行者123 更新时间:2023-12-04 12:36:59 27 4
gpt4 key购买 nike

我在 WPF 中创建了一个 ListBox 样式,以便它呈现为复选框列表。

当我手动填充 ListBox 的项目时,样式完美无缺。但是,当我改为将 ListBox 的 ItemsSource 绑定(bind)到静态资源(包含所需项目的 ItemsControl)时,样式完全被丢弃。

样式如下:

<Style x:Key="CheckBoxListStyle" TargetType="ListBox">
<Style.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
<ContentPresenter
Grid.Column="1"
Margin="2,0,0,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
</Style>

下面是正确显示样式的 ListBox 的代码:

<ListBox x:Name="ColumnsList"
Grid.Column="0"
Grid.Row="0"
Style="{StaticResource CheckBoxListStyle}"
BorderThickness="1">
<ListBox.Items>
<ListBoxItem>Test</ListBoxItem>
<ListBoxItem>Test2</ListBoxItem>
<ListBoxItem>Test3</ListBoxItem>
</ListBox.Items>
</ListBox>

下面是忽略样式的 ListBox 的代码:

<ListBox x:Name="ColumnsList2"
Grid.Column="0"
Grid.Row="0"
Style="{StaticResource CheckBoxListStyle}"
BorderThickness="1"
ItemsSource="{Binding Source={StaticResource Test1}, Path=Items}">
</ListBox>

希望有人能提供帮助 - 我对这一切还很陌生,并且尝试了我能想到的一切,但我读过的所有内容都让我相信设置 ItemsSource 应该与手动设置项目有相同的结果,所以我看不出有任何原因这行不通。

谢谢,

最佳答案

将 Style.Resources 更改为设置 ItemContainerStyle 属性,它应该可以正常工作。

    <Style x:Key="CheckBoxListStyle" TargetType="ListBox">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
<ContentPresenter
Grid.Column="1"
Margin="2,0,0,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
</Style>

在旧版本(SP1 之前)中,当您在 Style 中定义 Style 时,其中一种样式将被忽略。或者,您可以在父资源中设置样式资源..

希望这对您有所帮助!

关于WPF - ListBox 在绑定(bind) ItemsSource 时忽略样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com