16

私はリストボックスを持っています。内部に ScrollViewer があるため、ListBox のコンテンツをマウス ホイールでスクロールできます。別の ListBox を含む項目テンプレートを設定するまでは正常に動作します (実際には、ネストされた ListBox が 4 つあります =))。問題は、内部 ListBox の ScrollViewer がホイール イベントを盗むことです。この動作を防ぐ簡単な方法はありますか?


次のような ItemContainerStyle の ListBox がありました。

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="BorderBrush" Value="Black"/>
     ... 
</Style>
<ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}" />

このようなリソースで ItemContainer のアイテム境界線のスタイルを設定するにはどうすればよいですか? 私が知っているように、ContentPresenter は ItemsControl のアイテム コンテナです。でもボーダーじゃないからスタイリングできない。

4

6 に答える 6

59

コントロール テンプレートをより単純なものに変更することで、ScrollViewerからを削除できます。ListBox

<ListBox>
    <ListBox.Template>
        <ControlTemplate>
            <ItemsPresenter />
        </ControlTemplate>
    </ListBox.Template>
    ...
</ListBox>

しかし、ListBox を入れ子にすることの価値には疑問があります。それぞれListBoxがセレクターであり、どのアイテムが「選択」されているかという概念があることに注意してください。選択された項目の中に、選択された項目の中に、選択された項目があることは本当に意味があるのでしょうか?

ネストされたリストに項目を選択できないように、「内部」ListBoxesをシンプルに変更することをお勧めします。ItemsControlsこれにより、ユーザー エクスペリエンスが大幅に簡素化されます。スクロールバーを削除するために同じ方法でインナーを再テンプレート化する必要があるかもしれませんItemsControlsが、少なくともユーザーはどの項目が「選択されている」かについて混乱することはありません。

于 2009-11-15T23:35:52.960 に答える
2

こんな古い記事を起こしてすみません。実際には、ScrollViewer の添付プロパティを使用して、ScrollViewer を無効にすることができます。

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
         ScrollViewer.VerticalScrollBarVisibility="Disabled" ...
</ListBox>
于 2016-08-16T03:44:49.243 に答える