2

リストボックスがあり、データテンプレートにエキスパンダーがあります。

エキスパンダー ヘッダーをクリックすると、エキスパンダーはコンテンツ ゾーンを展開しますが、親の ListBoxItem を選択しません。

Expander の Expanded Content Zone をクリックすると、親の ListBoxItem が選択されます。

expanderHeader をクリックすると、コンテンツが展開され、親リストボックス項目が選択されるようにする方法は?

4

4 に答える 4

9

私はこの質問に答えられたことを理解していますが、この望ましい結果を達成するためのはるかに簡単な方法があります。にを追加するTriggerと、その要素にキーボードフォーカスがあるListBoxItem Style場合はいつでも選択できます。ListBoxItemItemTemplate

<Style.Triggers> 
  <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
    <Setter Property="IsSelected" Value="True"/> 
  </Trigger> 
</Style.Triggers>

詳細については、MSDN、またはpost1またはpost2を参照してください。

于 2011-12-04T22:15:00.667 に答える
1

私は同じ問題に遭遇し、ListBox で PreviewGotKeyboardFocus イベントをリッスンして処理しました。フォーカスが変化したら、ビジュアル ツリーをたどって ListBoxItem を探し、それを選択します。

    private void ListBox_PreviewGotKeyboardFocus( object sender, KeyboardFocusChangedEventArgs e )
    {
        if( e.NewFocus is FrameworkElement )
        {
            ListBoxItem item = ( e.NewFocus as FrameworkElement ).FindParent<ListBoxItem>();
            if( item != null && !item.IsSelected )
            {
                item.IsSelected = true;
            }
        }
    }

    public static T FindParent<T>( this FrameworkElement element ) where T : FrameworkElement
    {
        DependencyObject current = element;

        while( current != null )
        {
            if( current is T )
            {
                return ( T ) current;
            }

            current = VisualTreeHelper.GetParent( current );
        }

        return null;
    }
于 2011-04-09T04:54:02.463 に答える
0

Expandedそのためにイベントを使用できませんか?

何かのようなもの

<Expander Expanded="Expander_Expanded"

private void Expander_Expanded(object sender, RoutedEventArgs e)
{
    parentListBox.Focus();
}
于 2011-03-04T13:43:06.770 に答える
0

できることは、Expander の IsExpanded プロパティを ListBoxItem の IsSelected プロパティに直接バインドすることです。ただし、これは、アイテムを選択するだけで、エキスパンダーも展開されることを意味します...また、選択されていないアイテムは決して展開されないことも意味します。

例:

  <ListBox>
    <ListBox.ItemTemplate>
      <DataTemplate>
        <Expander IsExpanded="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}">
          <TextBlock Text="bla bla" />
        </Expander>
      </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.Items>
      <DataObject />
      <DataObject />
    </ListBox.Items>
  </ListBox>
于 2011-03-04T13:53:49.527 に答える