0

2 つのリストビューを含むグリッドを取得しました。リストビューは同じです(アイテムソースのみが他のアイテムと異なります)、1 つのラベルと別のグリッドを持つ datatemplate = Stackpanel です。ここで、項目が選択されている場合 (ラベル) にのみグリッド (Datatemplate 内にあるスタックパネル内) が表示されるようにします。このコードで試してみました( Listview のデータテンプレートに入れました:

<StackPanel>
<Label content={binding blabla} />
<Grid Visibility="{Binding IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}, Mode=FindAncestor}, Mode=OneWay,  Converter={StaticResource BooleanToVisibilityConverter}}" >
...random labels etc...
</Gird>
</StackPanel>

これはうまくいきます!ただし、2番目のリストビュー(および2番目のみ)でアイテムを選択すると、最初のリストビューにもそのグリッド(同じ「アイテムレベル」)が表示されます)(たとえば、2番目のリストビューで3番目のアイテム(ラベル)、グリッドは 2 番目のリストビューの 3 番目のアイテムに表示されますが、3 番目のアイテム グリッドは最初のリストビューに表示されます!!!!)

これは相対的なソースに関係していると思いますが、答えが見つかりませんでした。皆さんが私を助けてくれることを願っています。

4

1 に答える 1

1

フォーカスがないからListBoxといって、アイテムが選択解除されるわけではありません.2つのListView間で同期を行っている両方で、SelectedItemまたはSelectedIndex同じプロパティにバインドされていると思われますListViewsListViewItem.IsSelected

Grid の Visibility 条件を 1 つではなく 2 つのプロパティに基づいて作成することをお勧めします: ListViewItem.IsSelectedtrue であり、かつ true にListViewItem.IsKeyboardFocusWithin設定されている場合。

を使用した例を次に示します。DataTrigger

<Style TargetType="{x:Type Grid}" x:Key="GridStyle">
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True" Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
                <Condition Value="True" Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Visibility" Value="Visible" />
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

実際に振り返ってみると、アイテムを選択済みとして設定すると思うので、代わりにIsKeyboardFocusWithin使用するだけでよいかもしれませんIsKeyboardFocusWithinIsSelected

于 2012-03-15T13:23:34.273 に答える