0

リストボックスにスタイリングを入れようとしています.リストボックスが作成されたとき、それは1つのアイテムのサイズを持ち、マウスが上にあるとき、5つのアイテムに合うように高さを増やす必要があります。ユーザーがマウスをその上に置いて別のフィールドに移動すると、それが大きくなって元のサイズに戻るのを見るのが面倒になります。

そこで、この ListBox の DoubleAnimation を使用して Storyboards を試すことにしました。私はこれに達しました:

    <Style TargetType="ListBox">
        <Setter Property="VerticalAlignment" Value="Top" />
        <Setter Property="Height" Value="20" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard BeginTime="0:0:.25">
                            <DoubleAnimation Storyboard.TargetProperty="Height" From="20" To="85" Duration="0:0:0"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
            </Trigger>
        </Style.Triggers>
    </Style>

わかりました、それはうまくいきます。パーフェクト、私はすでにプロのように感じています。しかし、テストに行ったとき、問題が発生しました。マウスオーバーがなくなると、リストボックスは元のサイズに戻りません。そこで、逆のことをしてProperty="IsMouseOver" Value="False"FromとのTo値を入れ替えて使用することにしました。ListBox は移動しません。

それで、StackOverflowで見た答えを試してみましDataTemplate.Triggersたが、同じ結果が得られました。

WPF の知識不足が毎回邪魔になるので、他に何を試すべきかわかりません。

これに代わる良い方法は何ですか?事前に感謝し、意見はいつでも歓迎します。

4

1 に答える 1

2

追加の戻り値を使用StoryboardするTrigger.ExitActions

<Trigger.ExitActions>
    <BeginStoryboard>
        <Storyboard BeginTime="0:0:.25">
            <DoubleAnimation Storyboard.TargetProperty="Height"
                             From="85" To="20" Duration="0:0:0"/>
        </Storyboard>
    </BeginStoryboard>
</Trigger.ExitActions>

それがなければ、Storyboardデフォルトで値が保持されます。FillBehavior プロパティを参照してください。


または、 の場合のように が true の場合はFillBehavior="Stop"、新しいHeight値を設定して設定することもできます。IsMouseOverScrollViewer.VerticalScrollBarVisibility

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Height" From="20" To="85"
                                     Duration="0:0:0.5" FillBehavior="Stop" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Setter Property="Height" Value="85" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    </Trigger>
</Style.Triggers>
于 2013-07-04T15:03:04.953 に答える