Пользовательские свойства UserControl для триггеров - PullRequest
3 голосов
/ 26 февраля 2012

Я пишу пользовательский элемент управления, называемый MyUserControl.У меня есть много DependecyProperties для него, который я использую в MainWindow, где несколько MyUserControl определяются несколько раз.Я хотел бы знать, как я могу создать пользовательские свойства, которые будут запускать триггеры / свойства для стиля?

Например, если у меня есть пользовательское свойство BOOL IsGoing и пользовательское свойство MyBackgroung (фон UserControl), оба определены как:

public bool IsGoing
    {
        get { return (bool)this.GetValue(IsGoingProperty); }
        set { this.SetValue(IsGoingProperty, value); }
    }
    public static readonly DependencyProperty IsGoingProperty = DependencyProperty.RegisterAttached(
        "IsGoing", typeof(bool), typeof(MyUserControl), new PropertyMetadata(false));  

public Brush MyBackground
    {
        get { return (Brush)this.GetValue(MyBackgroundProperty); }
        set { this.SetValue(MyBackgroundProperty, value); }
    }
    public static readonly DependencyProperty MyBackgroundProperty = DependencyProperty.Register(
            "MyBackground", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(Brushes.Red));

и если я определю свой UserControlMainWindow.xaml, как я могу получить доступ к триггерам и установить MyBackground, в зависимости от того, является ли свойство IsGoing истинным / ложным?Я пробовал много вещей, но по сути, я пытаюсь достичь чего-то вроде:

<custom:MyUserControl MyBackground="Green" x:Name="myUC1" Margin="120.433,0,0,65.5" Height="50" Width="250" VerticalAlignment="Bottom" HorizontalAlignment="Left"  >
        <Style>
            <Style.Triggers>
                <Trigger Property="IsGoing" Value="True">
                    <Setter Property="MyBackground" Value="Yellow"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </custom:MyUserControl>

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

Адриан

1 Ответ

3 голосов
/ 26 февраля 2012

Ваш стиль должен просто использоваться как UserControl.Style и иметь правильные TargetType, а также значения по умолчанию, которые вы собираетесь изменить с помощью триггера, должны быть перемещены в стиль из-за приоритета

<custom:MyUserControl.Style>
    <Style TargetType="custom:MyUserControl">
        <Setter Property="MyBackground" Value="Green"/>
        <Style.Triggers>
            <Trigger Property="IsGoing" Value="True">
                <Setter Property="MyBackground" Value="Yellow"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</custom:MyUserControl.Style>

То, действительно ли это делает , зависит от того, как вы используете свойства в определении элемента управления.

...