Изменение свойства элемента управления, определенного в шаблоне - PullRequest
0 голосов
/ 25 мая 2020

Я хочу получить доступ к BackgroundEllipse из MaterialDesignClock, который определяется в MaterialDesignTheme.Clock.xaml

После доступа к Ellipse мне нужно изменить непрозрачность BackgroundEllipse.

Приведенный ниже пример кода не работает.

<materialDesign:Clock x:Name="MaterialTimePicker" Is24Hours="True" 
                    BorderThickness="0" >
    <materialDesign:Clock.Style>
        <Style>
            <Setter TargetName="BackgroundEllipse" Property="Opacity" Value="1" />
        </Style>
    </materialDesign:Clock.Style>
</materialDesign:Clock>

1 Ответ

1 голос
/ 25 мая 2020

Вы не можете изменить Opacity из Ellipse, включенного в шаблон в XAML, без копирования всего шаблона и его редактирования. Значение Opacity жестко запрограммировано на 0.23.

Вы можете изменять его динамически:

private void MaterialTimePicker_Loaded(object sender, RoutedEventArgs e)
{
    Clock clock = (Clock)sender;
    Ellipse ellipse = clock.Template.FindName("BackgroundEllipse", clock) as Ellipse;
    if (ellipse != null)
    {
        ellipse.Opacity = 1.0;
    }
}

XAML:

<materialDesign:Clock x:Name="MaterialTimePicker" Is24Hours="True" BorderThickness="0"
    Loaded="MaterialTimePicker_Loaded"/>

Это требует намного меньше разметки, чем решение XAML для копирования шаблона.

...