Шаблон XAML FindName не работает для именованного триггера - PullRequest
0 голосов
/ 06 ноября 2019

У меня кнопка WPF в стиле, показанном ниже

<Style x:Key="InfoCenterButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Border x:Name="ButtonBorder" CornerRadius="5,5,5,5" BorderBrush="#aaa" BorderThickness="1,1,1,1" >
                        <Grid>
                            <TextBlock x:Name="ButtonTextBox" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" 
                                   Text="{TemplateBinding Content}" 
                                   TextAlignment="Center" Margin="0,0,0,0" Foreground="White" FontSize="35" FontFamily="Arial">
                                <TextBlock.Effect>
                                    <DropShadowEffect x:Name="TextShadow" BlurRadius="3" ShadowDepth="0"/>
                                </TextBlock.Effect>
                            </TextBlock>
                        </Grid>

                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.504,1.5" StartPoint="0.504,0.03">
                                <GradientStop x:Name="ButtonBackgroundGradientStartColor" Color="#FFFFC934" Offset="0"/>
                                <GradientStop x:Name="ButtonBackgroundGradientEndColor" Color="#FFFFA200" Offset="0.567"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <Border.Effect>
                            <DropShadowEffect x:Name="DropShadow" Direction="270" Color="Black" Opacity=".50" ShadowDepth="4" RenderingBias="Quality" />
                        </Border.Effect>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="ButtonBorder" Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush EndPoint="0.504,1.5" StartPoint="0.504,0.03">
                                    <GradientStop x:Name="ButtonBackgroundGradientPressedStartColor" Color="#FFFFC934" Offset="0"/>
                                    <GradientStop x:Name="ButtonBackgroundGradientPressedEndColor" Color="#FFFFA200" Offset="0.567"/>
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="ButtonBorder" Property="Effect">
                            <Setter.Value>
                                <DropShadowEffect ShadowDepth="0" BlurRadius="2" />
                            </Setter.Value>
                        </Setter>
                        <Setter TargetName="ButtonBorder" Property="Background" Value="#55aaaaaa"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я использую следующий код, чтобы получить именованные элементы для программного изменения атрибутов, т. Е.

                    GradientStop gsend = (GradientStop)mButtons[button].Template.FindName("ButtonBackgroundGradientEndColor", mButtons[button]);
                    if (gsend != null) gsend.Color = (Color)ColorConverter.ConvertFromString(menuoption[i].Attributes["bgendgradient"].Value);

Однако я не могунайдите именованный элемент в разделе ControlTemplate.Triggers XAML. То есть этот код не работает и возвращает ноль.

GradientStop gsend = (GradientStop)mButtons[button].Template.FindName("ButtonBackgroundGradientPressedEndColor", mButtons[button]);

gsent всегда равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...