我有这个XAML,目前有效。我想添加第二个ListBox
,它与第一个Style
相同。我想定义一个适用于两者的Style
,而不是重复所有的XAML。我在<style></style>
中尝试了Windows.Resources
标记,但它不知道ListBox.GroupStyle
是什么。我尝试了ListBox.GroupStyle
,但它不知道TargetType
参数是什么。我不确定我应该寻找什么来解决这个问题。大多数示例都涉及单个ListBox的样式,并直接在XAML中进行。
<Grid Width="Auto" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
Padding="0,0,10,10" ItemsSource="{Binding Path=ItemList}">
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}" IsExpanded="False">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=DisplayName}"
IsChecked="{Binding Path=IsChecked}" Margin="5 5 0 0"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Grid.Row="1" Content="{Binding Path=ActionLabel}"
Margin="10" Click="ActionButton_Click"/>
<Button Grid.Row="1" Grid.Column="1" Content="Cancel"
Margin="10" Click="CloseButton_Click"/>
</Grid>
答案 0 :(得分:0)
您可以为Style
中的ListBox
定义Window.Resources
。我不知道你的尝试是否引发了一些错误,但你真的可以携带Style
所有常见属性。
必须使用ListBox
的任何Style
只需设置其Style
属性。
这是一个可能的例子:
<Window.Resources>
<Style TargetType="ListBox" x:Key="MyListBoxStyle">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0,0,10,10"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}" IsExpanded="False">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" Name="LB1"
ItemsSource="{Binding Path=Source1}"
Style="{StaticResource ResourceKey=MyListBoxStyle}"/>
<ListBox Grid.Row="1" Name="LB2"
ItemsSource="{Binding Path=Source2}"
Style="{StaticResource ResourceKey=MyListBoxStyle}"/>
</Grid>
我将ItemsSource
属性从Style
中删除了,因为我认为这两个ListBoxes
有2个不同的来源,但是如果它们具有相同的来源,则可以添加Setter
像Style
这样的1}}:
<Setter Property="ItemsSource" Value="{Binding Path=MySingleSource}"/>