在列表中选择单个扩展器

时间:2014-08-22 08:09:32

标签: wpf listbox expander

我在列表框中有很多扩展器,我需要在任何时候只需要扩展一个扩展器。

我使用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");
            };
        }
    }

令我惊讶的是,当我将它放入我的项目代码时,所选的和未选择的事件永远不会被调用。是否有任何理由发生这种情况。

有人可以指导我吗?

感谢

0 个答案:

没有答案