我在WPF中創建了一個樣式的列表框,以便它呈現爲複選框列表。WPF - 列表框忽略樣式當ItemsSource綁定
當我手動填充ListBox的項目時,樣式完美地工作。但是,當我將ListBox的ItemsSource綁定到靜態資源(包含所需項目的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 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應該與手動設置項目的結果相同,所以我看不出任何原因,這是行不通的。
感謝,
AT
偉大 - 除了你忘記Setter.Value標記。除此之外,它似乎工作。謝謝! – 2010-03-16 17:30:08
好點,我在答案中加入了:) – Arcturus 2010-03-17 08:25:01