0

Для моего PasswordBox, я написал стиль, в нем я сделал ScrollView как говорит сделать docs.microsoft. И после этого, у меня все время прозрачный Border каким-то боком + не срабатывают его триггеры(на изменение цвета). Если же я в Border явно задаю Background, то он приоьретает цвет, но триггеры не работают так как Background задан жестко.

Стиль PasswordBox

<Style x:Key="AutorizationPasswordBox" TargetType="{x:Type PasswordBox}">
        <Setter Property="Height" Value="30"></Setter>
        <Setter Property="OverridesDefaultStyle"
                Value="true" />
        <Setter Property="AllowDrop"
                Value="true" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type PasswordBox}">
                    <Grid>
                        <Border CornerRadius="3">
                            <ScrollViewer x:Name="PART_ContentHost" Background="{x:Null}"
                                      BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Center" />
                            <Border.Style>
                                <Style TargetType="{x:Type Border}" BasedOn="{StaticResource DefaultColorChanger}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=PART_ContentHost, Path=IsFocused}" Value="True">
                                            <Setter Property="Background" Value="#D8FFFFFF"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

BasedOn: DefaultColorChanger

<Style TargetType="{x:Type Border}" x:Key="DefaultColorChanger">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="#D8FFFFFF"></Setter>
                <Setter Property="BorderBrush" Value="Aqua"></Setter>
            </Trigger>
        </Style.Triggers>
        <Setter Property="Background" Value="#B2FFFFFF"></Setter>
    </Style>
  • Background="{x:Null}" -> Background="Transparent", а вообще, вынесите цвет в сеттер, которые в начале стиля, а в Template делайте привязку к нему ({TemplateBinding Background}). – EvgeniyZ Jan 18 '22 at 14:58
  • 1
    Да помогло, после того, как все убрал с Border.Style. Но почему так? Почему он не реагирует на Border.Style? – Gorge Flow Jan 18 '22 at 15:24
  • Честно, не могу сказать. Скорей всего тут дело в наследовании и скорей всего в приоритетах. У вас просто не очень стандартная структура, вы делаете стиль, внутри которого стиль, который наследуется от другого стиля. Попробуйте разделить их, вынесите каждый в отдельный ресурс, со своим x:Key, в теории тоже будет работать. А так, мне кажется, вы лишним делаете у Border'a стиль, зачем он там? Можно ведь сделать всю эту задачу одним простым стилем, а не 3-мя) – EvgeniyZ Jan 18 '22 at 17:28

0 Answers0