Вызов другого элемента внутри дерева WPF в стиле - PullRequest
0 голосов
/ 30 июня 2009

Моя точка зрения такова. Для теста мне нужно, когда пользователь проверяет chk1 элемент chk2 изменил свойство IsEnabled на False , , но я не могу сделать ссылку на элемент chk2 .

Это стиль XAML.

<Style x:Key="styleCheckBox" TargetType="{x:Type CheckBox}">
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">

            </Style.Triggers>
 </Style

Call to Style ..

 <StackPanel>
        <CheckBox x:Name="chk1" Content="CheckBox1" Style="{StaticResource styleCheckBox}"/>
        <CheckBox x:Name="chk2" Content="CheckBox2"/>
    </StackPanel>

1 Ответ

3 голосов
/ 30 июня 2009

Вы не можете установить TargetProperty в Style Trigger. В основном это означает, что вы должны создать пользовательский элемент управления, производный от StackPanel, который содержит два флажка, и эти флажки отображаются в виде свойств. Затем вы сможете определить стиль для этого элемента управления (не CheckBox) и установить нужные свойства.

Гораздо более простой способ (если он нужен только для тестирования) будет следующим:

<StackPanel>
<StackPanel.Resources>
    <local:InverseBoolConverter x:Key="InverseBoolConverter"/>
</StackPanel.Resources>
<CheckBox x:Name="chk1" Content="CheckBox1"/>
<CheckBox x:Name="chk2" Content="CheckBox2" IsEnabled="{Binding ElementName=chk1, Path=IsChecked, Converter={StaticResource InverseBoolConverter}}"/>
</StackPanel>

Где InverseBoolConverter определяется следующим образом:

[ValueConversion(typeof(bool), typeof(bool))]
public class InverseBoolConverter: IValueConverter {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if(value is bool)
            return !(bool)value;
        else
            return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if(value is bool)
            return !(bool)value;
        else
            return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...