我在列表框中有很多扩展器,我需要在任何时候只需要扩展一个扩展器。
我使用msdn论坛中的以下代码
<ListBox>
<ListBox.Resources>
<Style TargetType="{x:Type Expander}">
<Setter
Property="IsExpanded"
Value="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"/>
</Style>
</ListBox.Resources>
<ListBox.Template>
<ControlTemplate TargetType="{x:Type ListBox}">
<ItemsPresenter/>
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter Content="{TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<Expander Background="Gray" Width="243" Header="Expander1">
<StackPanel>
<RadioButton Content="Eat Me" GroupName="Two"/>
<RadioButton Content="Eat Pork" GroupName="Two"/>
<RadioButton Content="Eat at Joe's" GroupName="Two"/>
</StackPanel>
</Expander>
<Expander Background="Gray" Width="243" Header="Expander2">
<StackPanel>
<RadioButton Content="Pork" GroupName="Two"/>
<RadioButton Content="Beef" GroupName="Two"/>
<RadioButton Content="Chicken" GroupName="Two"/>
</StackPanel>
</Expander>
<Expander Background="Gray" Width="243" Header="Expander3">
<StackPanel>
<RadioButton Content="Grill" GroupName="Two"/>
<RadioButton Content="Bake" GroupName="Two"/>
<RadioButton Content="Fry" GroupName="Two"/>
</StackPanel>
</Expander>
当我将此代码粘贴到示例应用中时,一切正常。
但是当我将其粘贴到我们的项目代码中时,单个扩展器选择不起作用。 我使用附加行为来弄清楚真正发生的事情。
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter Content="{TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="utilities:ListBoxItemBehavior.TemplatedListBoxItem" Value="True"/>
</Style>
private static void Callback(object sender, DependencyPropertyChangedEventArgs args)
{
ListBoxItem listBoxItem = sender as ListBoxItem;
if (listBoxItem != null)
{
listBoxItem.Selected += (s, a) =>
{
MessageBox.Show("ListBoxItem selected");
};
listBoxItem.Unselected += (s, a) =>
{
MessageBox.Show("ListBoxItem un-selected");
};
}
}
令我惊讶的是,当我将它放入我的项目代码时,所选的和未选择的事件永远不会被调用。是否有任何理由发生这种情况。
有人可以指导我吗?
感谢