Xaml: Использование триггера дочернего элемента управления для изменения свойства родительского элемента управления - PullRequest
2 голосов
/ 06 мая 2011

Я пытаюсь изменить свойство родительского элемента управления через триггер дочернего элемента управления. В частности, я пытаюсь изменить непрозрачность DropShaddowEffect Border через триггер OnKeyboardFocus дочернего TextBox Border.

Однако TargetName установщика выдает ошибку, что имя не распознано.

Вот XAML:

<Border x:Name="HeaderTextBoxBorder">
    <Border.Effect>
        <DropShadowEffect Opacity="20"/>                                    
    </Border.Effect>
    <TextBox x:Name="HeaderTextBox">
        <TextBox.Style>
            <Style
                TargetType="{x:Type TextBox}">
                <!-- Attmpting to change opacity on focus -->
                <Style.Triggers>
                    <Trigger
                        Property="IsKeyboardFocused"
                        Value="True">
                            <Setter
                                <!-- The error occurs here -->
                                TargetName="HeaderTextBoxBorder"
                                Property="Effect">
                                <Setter.Value>
                                    <DropShadowEffect Opacity="100"/>
                                </Setter.Value>
                            </Setter>
                    </Trigger>
                </Style.Triggers>   
            </Style>
        </TextBox.Style>
    </TextBox>
</Border>

Глядя на XAML, есть ли что-нибудь неверное?

Спасибо, что уделили время.

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Стиль - это отдельная область имен, поэтому вы не сможете получить доступ к своей границе через такое имя.

Вам необходимо связать свойство Border.Effect с элементом TextBox.IsKeyboardFocused и таким образом изменить прозрачность, например:

<Border.Effect>
    <DropShadowEffect Opacity="{Binding ElementName=HeaderTextBox, Path=IsKeyboardFocused, Converter={StaticResource local:CustomConverter}" />
</Border.Effect>

Где CusotmConverter реализует IValueConverter и возвращает либо 20или 100, в зависимости от логического значения.

0 голосов
/ 17 мая 2018

Я довольно поздно :) IsKeyboardFocusWithin может быть использован для решения этой проблемы.Это свойство будет установлено в true для элемента, когда любой дочерний элемент этого элемента имеет фокус клавиатуры.

<Window.Resources>
    <Style x:Key="HoneydewFocus" TargetType="Border">
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="true">
                <Setter Property="Background" Value="Honeydew"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel>
    <Border Margin="10"
            Style="{StaticResource HoneydewFocus}">
        <TextBox Width="200" Height="25" Margin="10"/>
    </Border >
</StackPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...