2

Style別のコントロールの幅を変更するコントロールを記述する方法はありますか?

<Style x:Key="SubMenuStyle" TargetType="Label">
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="LightCyan"/>

    <Style.Triggers>
        <EventTrigger RoutedEvent="MouseLeftButtonDown">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="Menu" Storyboard.TargetProperty="Width" To="0" Duration="0:0:.5"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

このコードはエラーにつながります:

スタイル セッターで TargetName プロパティを設定することはできません

私は以下のコードを書くことができ、それが機能することを知っています:

<Label Name="Owners" Margin="0,1,0,0" MouseLeftButtonDown="SubMenuClicked" Style="{StaticResource SubMenuStyle}">
    <Label.Triggers>
        <EventTrigger RoutedEvent="MouseLeftButtonDown">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="Menu" Storyboard.TargetProperty="Width" To="0" Duration="0:0:.5"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Label.Triggers>
</Label>

しかし、このトリガーは複数のラベルで使用するので、一度スタイルに書きたいと思います。

これは、コントロールを定義するための私のコードです:

<Border Name="Menu" Grid.Column="2" Grid.Row="1" Width="0" HorizontalAlignment="Right" BorderBrush="LightBlue" BorderThickness="2" CornerRadius="2" Background="LightCyan">
    <StackPanel Name="MenuPanel">
        <Button Style="{StaticResource MenuButtonsStyle}">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="ListsMenu" Storyboard.TargetProperty="Height" To="86" Duration="0:0:.6"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>

        <StackPanel Name="ListsMenu" Height="0">
            <Label Name="Owners" Margin="0,1,0,0" MouseLeftButtonDown="SubMenuClicked" Style="{StaticResource SubMenuStyle}"/>
            <Label Name="Contacts" MouseLeftButtonDown="SubMenuClicked" Style="{StaticResource SubMenuStyle}"/>
            <Label Name="Groups" MouseLeftButtonDown="SubMenuClicked" Style="{StaticResource SubMenuStyle}"/>
        </StackPanel>
    </StackPanel>
</Border>

シナリオ: 境界線があります。デフォルトの幅はゼロです。正常に動作する別のトリガーで 165 に引き上げられます。ラベルがクリックされたときに再度ゼロにアニメートしたいのですが、ラベルでその境界線の幅にアクセスできません。スタイル

4

2 に答える 2

2

複数のラベルでトリガーを使用すると主張しているため、このようにトリガーを一度に定義できます

        <Storyboard x:Key="animation">
             <DoubleAnimation Storyboard.TargetName="ListsMenu" Storyboard.TargetProperty="Height" To="86" Duration="0:0:.6"/>
        </Storyboard>

後で必要なときに呼び出すことができます

 <EventTrigger RoutedEvent="MouseEnter" >
                <BeginStoryboard Storyboard="{StaticResource animation}"/> 
            </EventTrigger>

しかし、私はあなたが何を手に入れるつもりだったのか少し混乱しています. 言われたように、スタイルには名前スコープがないため、スタイルにアクセスすることはできません。ラベルの幅を変更する場合、このようなスタイルでこれを行うことができます

  <Style x:Key="style_button" TargetType="Button">
        <Style.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Width" To="300" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

ただし、StoryBoard.TargetName によって別のオブジェクトを呼び出します。

于 2013-09-29T11:51:58.380 に答える