1

このトリガーが機能しない理由を教えてください。

<!--Style-->
<Style x:Key="Test" TargetType="{x:Type Expander}">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="IsExpanded" Value="false"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

<!-- Syle applyed in expander -->
<Expander Header="Expander" Margin="40,89,118,0" Name="expander1" Height="23" VerticalAlignment="Top" >
            <Grid>
                <Ellipse Height="100" Margin="86,0,-8,-58" Name="ellipse1" Stroke="Black" VerticalAlignment="Bottom" />        
            </Grid>
        </Expander>

<!-- Code Behind -->
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.expander1.IsEnabled = false;
        }

他の方法で試してみましたが、成功しませんでした..エキスパンダーが無効になっているときにコンテンツを折りたたむ別の方法があります。

4

3 に答える 3

1

次のようにスタイルを Expander に適用する必要があります。

<Expander Header="Expander" Name="expander1" Style="{StaticResource Test}" >
...
</Expander>

スタイルを明示的に適用したくない場合は、 を宣言しないでください。x:Key="Test"そのリソースと同じスコープ内のすべての Expander (つまり、 で宣言x:Key="Test"した場合はその特定の Page 内のすべての Expander <Page.Resources>) がそのスタイルを継承します。

于 2009-10-06T01:56:55.527 に答える
0

問題は、ユーザーがエキスパンダーをクリックすると、IsExpanded の「ローカル値」が設定され、トリガーよりも優先されることです。依存関係プロパティ値の優先順位の詳細については、この msdn ページを参照してください。

考えられる解決策は、Expander コントロール テンプレート全体を書き直し、テンプレートのトリガーにトリガーを追加して、false の場合に「展開された」ゾーンを非表示にすることIsEnabledです (既定のテンプレートは、IsExpandedfalse の場合にのみこれを行います)。Blend を使用してデフォルトのテンプレートを取得できます。ウィンドウにエキスパンダーを追加し、それを右クリックして、コンテキスト メニューで [テンプレートの編集] > [コピーの編集] を選択します。

于 2009-10-06T09:18:06.643 に答える
0

ありがとう、でもあなたが言及したコードのブロックを忘れてしまいました。Style タグに参照を入れましたが、問題は解決しません。

于 2009-10-06T02:13:58.670 に答える