Задать вопрос
Aquarius-Michael
@Aquarius-Michael
Программист и железячник

Есть ли такая возможность расширенной обработки в зависимости от состояния числового флага?

Есть стандартная кнопка. В ControlTemplate для Button описаны поведения стиля при состоянии IsEnable, IsMouseOver и IsPressed. Есть ли такая возможность нестандартной обработки в зависимости от свойства в коде C#? Например, свойстве в коде на C# может принимать числа 0, 1, 2 и 3. Значит, в зависимости от числа при поведении, например IsEnable, кнопка должна окраситься в один цвет из четырёх.

Поискал в интернете и сделал на отдельной программе вот такой тестовый код:
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
            <Border BorderBrush="LightGray" BorderThickness="1" CornerRadius="3" Name="border"
                    TextBlock.Foreground="LightGray" Background="Gray">
                <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="local:PeakHelper.IsPeak" Value="True">
                    
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="border" Property="Background" Value="DarkGray"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="border" Property="BorderBrush" Value="Yellow"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>


public class PeakHelper : DependencyObject
    {
        public static readonly DependencyProperty IsPeakProperty = DependencyProperty.RegisterAttached("IsPeak", typeof(bool), typeof(PeakHelper), new PropertyMetadata(false));

        public static void SetIsPeak(DependencyObject target, Boolean value)
        {
            target.SetValue(IsPeakProperty, value);
        }
        public static bool GetIsPeak(DependencyObject target)
        {
            return (bool)target.GetValue(IsPeakProperty);
        }
    }


Но столкнулся с проблемой: не видит почему-то пространстве имён этот код C#: ругается на триггер свойства Property="local:PeakHelper.IsPeak".
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Гуглите attached depency property и триггеры. Что то из этого вам точно подойдёт
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы