Nie mogę dostać się do właściwości obiektu wewnątrz stylu przycisku

0

Oto trzy fragmenty kodu + komunikat błędu. Co tam tak głupiego strzeliłem, że ma problemy z odnalezieniem właściwości koloru gradientu wypełniającego elipsę? Z góry dziękuję za pomoc.

<Window.Resources>
        <Style x:Key="check" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Grid Width="90" Height="30" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <Border x:Name="border" CornerRadius="3" BorderBrush="#FF000000" Background="#FF000000" BorderThickness="1">
                                <Border.Effect>
                                    <DropShadowEffect 
                                        ShadowDepth="0"
                                        Color="White"
                                        Opacity="1"
                                        BlurRadius="5"/>
                                </Border.Effect>
                                <Border x:Name="border2" CornerRadius="3" BorderThickness="0,1,0,0" BorderBrush="#FFBABABA">
                                    <Border.Background>
                                        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                            <GradientStop Color="#FF585858" Offset="0" />
                                            <GradientStop Color="#FF202020" Offset="1.0" />
                                        </LinearGradientBrush>
                                    </Border.Background>
                                </Border>
                            </Border>
                            <Grid Name="led" Margin="8,8,68,8">
                                <Ellipse x:Name = "e1">
                                    <Ellipse.Effect>
                                        <DropShadowEffect 
                                        ShadowDepth="0"
                                        Color="Black"
                                        Opacity="1"
                                        BlurRadius="2" Direction="0"/>
                                    </Ellipse.Effect>
                                    <Ellipse.Fill>
                                        <RadialGradientBrush x:Name="ledlight" GradientOrigin="0.5,0.5" Center="0.5,0.5">
                                            <RadialGradientBrush.GradientStops>
                                                <GradientStop Color="Cyan" Offset="0"/>
                                                <GradientStop Color="#FF151520" Offset="1.0" />
                                            </RadialGradientBrush.GradientStops>
                                        </RadialGradientBrush>
                                    </Ellipse.Fill>
                                </Ellipse>
                            </Grid>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="Button.IsEnabled" Value="False">
                                <Trigger.EnterActions>
                                    <StopStoryboard BeginStoryboardName="Waiting"/>
                                    <BeginStoryboard Storyboard="{StaticResource RunAnim}" />
                                </Trigger.EnterActions>
                                <Trigger.ExitActions>
                                    <BeginStoryboard Name="Waiting" Storyboard="{StaticResource WaitingAnim}"/>
                                </Trigger.ExitActions>
                            </Trigger>
                            <Trigger Property="Button.IsMouseOver" Value="True">
                                <Trigger.EnterActions>
                                    <BeginStoryboard Name="MouseOver" Storyboard="{StaticResource MouseOn}"/>
                                </Trigger.EnterActions>
                                <Trigger.ExitActions>
                                    <StopStoryboard BeginStoryboardName ="MouseOver"/>
                                </Trigger.ExitActions>
                            </Trigger>
                            <Trigger Property="Button.IsPressed" Value="True">
                                <Trigger.EnterActions>
                                    <BeginStoryboard x:Name="MouseClick" Storyboard="{StaticResource MouseClick}"/>
                                </Trigger.EnterActions>
                                <Trigger.ExitActions>
                                    <StopStoryboard BeginStoryboardName="MouseClick"/>
                                </Trigger.ExitActions>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Storyboard x:Key="CheckOK">
            <ColorAnimation To="#FF00FF00" Storyboard.TargetName="check"
            Storyboard.TargetProperty="Template.led.e1.ledlight.(GradientBrush.GradientStops)[0].(GradientStop.Color)" Duration="0:0:0.1"/>
        </Storyboard>
        <Storyboard x:Key="CheckBAD">
            <ColorAnimation To="#FF00FF00" Storyboard.TargetName="check"
            Storyboard.TargetProperty="Template.led.e1.ledlight.(GradientBrush.GradientStops)[0].(GradientStop.Color)" Duration="0:0:0.1"/>
        </Storyboard>
    </Window.Resources>


<Window.Resources>
        <Style x:Key="check" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Grid Width="90" Height="30" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <Border x:Name="border" CornerRadius="3" BorderBrush="#FF000000" Background="#FF000000" BorderThickness="1" ... >
                                <Border.Effect>
                                    <DropShadowEffect 
                                        ShadowDepth="0"
                                        Color="White"
                                        Opacity="1"
                                        BlurRadius="5"/>
                                </Border.Effect>
                                <Border x:Name="border2" CornerRadius="3" BorderThickness="0,1,0,0" BorderBrush="#FFBABABA">
                                    <Border.Background>
                                        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                            <GradientStop Color="#FF585858" Offset="0" />
                                            <GradientStop Color="#FF202020" Offset="1.0" />
                                        </LinearGradientBrush>
                                    </Border.Background>
                                </Border>
                            </Border>
                            <Grid Name="led" Margin="8,8,68,8">
                                <Ellipse x:Name = "e1">
                                    <Ellipse.Effect>
                                        <DropShadowEffect 
                                        ShadowDepth="0"
                                        Color="Black"
                                        Opacity="1"
                                        BlurRadius="2" Direction="0"/>
                                    </Ellipse.Effect>
                                    <Ellipse.Fill>
                                        <RadialGradientBrush x:Name="ledlight" GradientOrigin="0.5,0.5" Center="0.5,0.5">
                                            <RadialGradientBrush.GradientStops>
                                                <GradientStop Color="Cyan" Offset="0"/>
                                                <GradientStop Color="#FF151520" Offset="1.0" />
                                            </RadialGradientBrush.GradientStops>
                                        </RadialGradientBrush>
                                    </Ellipse.Fill>
                                </Ellipse>
                            </Grid>
                        </Grid> (...)

user image

1

Jest podobny przykład na https://msdn.microsoft.com/pl-pl/library/ms742868(v=vs.110).aspx#Anchor_4:

<SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" />
<ColorAnimation 
  Storyboard.TargetName="MySolidColorBrush"
  Storyboard.TargetProperty="Color"
  From="Blue" To="Red" Duration="0:0:1" /> 

Zrobiłabym więc analogicznie: TargetName = "ledlight" i TargetProperty = "GradientStops[0].Color".
Błąd polega na tym, że w TargetProperty masz ścieżkę złożoną nie z - jak już opis wyjątku mówi - właściwości (atrybutów XML), tylko z nazw nadanych elementom. To, że Ellipse o nazwie "e1" ma Fill = RadialGradientBrush o nazwie "ledlight" nie oznacza, że odniesiesz się do niego przez e1.ledlight - dla elipsy to nadal będzie jej Fill.

0

Próbowałem tych poniżej i nadal w sumie nie wiem jak to rozwiązać.

Storyboard.TargetName="check" Storyboard.TargetProperty="Style.ControlTemplate.Grid.Border.Grid.Ellipse.Fill.(GradientBrush.GradientStops)[0].(GradientStop.Color)" 

Storyboard.TargetName="RadialGradientBrush" Storyboard.TargetProperty="GradientStops[0].Color" Duration="0:0:0.1"/>

Storyboard.TargetName="check"Storyboard.TargetProperty="Template.GradientStops[0].Color" 
0

A co z moją propozycją?

0

Niestety nie do końca działa, ale chyba krok do przodu.

user image

Wcześniej w kodzie zamieściłem

        Storyboard CheckOK = (Storyboard)Application.Current.Resources["CheckOK"];
        Storyboard CheckBAD = (Storyboard)Application.Current.Resources["CheckBAD"];

EDIT:
Odnoszę wrażenie, jakby ColorAnimation w storyboardach Check.. nie widział wnętrza stylu Check przycisku check.

1 użytkowników online, w tym zalogowanych: 0, gości: 1