Nano Hash - криптовалюты, майнинг, программирование

Увеличение размера UserControl с помощью триггера стиля?

Я хотел бы, чтобы пользовательский элемент управления UserControl увеличивался на множитель, когда для DP «IsSelected» установлено значение true. Мой текущий XAML выглядит так:

<ctrl:MyBaseControl x:Class="MyDemo.Controls.MyCustomControl"
         ...>
<ctrl:MyBaseControl.Resources>
    <Style TargetType="{x:Type ctrl:MyCustomControl}">
        <Setter Property="BorderBrush" Value="White" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="BorderThickness" Value="2" />
                <Setter Property="Width" Value="340" />
                <Setter Property="Height" Value="260" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ctrl:MyBaseControl.Resources>
<Border>
    <StackPanel>
        ...
    </StackPanel>
</Border>

In the above sample, "MyBaseControl" extends UserControl, and defines the IsSelected DP.

Этот код просто не работает в данный момент, что является одной из моих проблем. Во-вторых, я хотел бы увеличить ширину/высоту на определенную величину (например: 0,10) вместо того, чтобы устанавливать ее на жесткое число. Таким образом, я могу установить размер, когда определяю элемент управления в источнике.

Спасибо за любую помощь!

ДОПОЛНИТЕЛЬНЫЙ КОД:

Код MyBaseControl:

public abstract class MyBaseControl: UserControl
{
    public static readonly DependencyProperty IsSelectedProperty =
        DependencyProperty.Register(
        "IsSelected",
        typeof(Boolean),
        typeof(MyBaseControl),
        new PropertyMetadata(null));

    public MyBaseControl() : base() { }

    #region Properties

    public Boolean IsSelected
    {
        get { return (Boolean)GetValue(IsSelectedProperty); }
        set { SetValue(IsSelectedProperty, value); }
    }

    #endregion Properties

}

Код MyCustomControl:

public partial class MyCustomControl: MyBaseControl
{
    public static readonly DependencyProperty IconProperty =
        DependencyProperty.Register(
        "Icon",
        typeof(ImageSource),
        typeof(MyCustomControl),
        new PropertyMetadata(null));

    public static readonly DependencyProperty BlurbProperty =
        DependencyProperty.Register(
        "Blurb",
        typeof(String),
        typeof(MyCustomControl),
        new PropertyMetadata(null));

    public MyCustomControl()
    {
        InitializeComponent();
    }

    #region Properties

    public ImageSource Icon
    {
        get { return (ImageSource)GetValue(IconProperty); }
        set { SetValue(IconProperty, value); }
    }

    public String Blurb
    {
        get { return (String)GetValue(BlurbProperty); }
        set { SetValue(BlurbProperty, value); }
    }

    #endregion Properties
}

Пример работы триггера на внутренних элементах:

    <Style TargetType="{x:Type Border}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ctrl:MyCustomControl}}, Path=IsSelected}" Value="True">
                <Setter Property="BorderThickness" Value="5" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

  • Не могли бы вы опубликовать код для своего UserControl и, возможно, код, который манипулирует IsSelected DP? 19.07.2012
  • Привет, KDiTraglia, я обновил свой пост дополнительным кодом. 20.07.2012
  • Изменяет ли что-нибудь состояние IsSelected? Из опубликованного кода будет казаться, что он всегда ложен (если только вы не добавили часть, которая изменит его) 20.07.2012
  • Я не включал код, но он устанавливается (я делаю это, перемещая пользовательский курсор над элементом управления). Я добавил еще один фрагмент кода в конец, который действительно работает, поэтому я знаю, что IsSelected проходит. Я пробовал аналогичные варианты этого рабочего блока для управления самим MyCustomControl, но безуспешно. 20.07.2012

Ответы:


1

Попробуй это

<ctrl:MyBaseControl.Resources>
    <Style TargetType="{x:Type ctrl:MyCustomControl}">
        <Setter Property="BorderBrush" Value="White" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="BorderThickness" Value="2" />
                <Setter Property="RenderTransform" >
                   <Setter.Value>
                       <ScaleTransform ScaleX="1.1" ScaleY="1.1" />
                   </Setter.Value>
                </Setter>
                <Setter Property="RenderTransformOrigin" Value="0.5, 0.5"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ctrl:MyBaseControl.Resources>
19.07.2012
  • Я пробую несколько вариантов этого, но пока триггер не срабатывает. Я обновил - Property=IsSelected - до - Binding={Binding IsSelected}, но все равно не повезло. По какой-то причине вещи не хотят действовать на самом элементе управления. 20.07.2012
  • Понятно. Я обновил DataTrigger до обычного триггера. Я не уверен, в чем разница между тем, что у меня есть сейчас, и тем, что я опубликовал изначально, но, по крайней мере, это работает. :) Дополнительный вопрос - с помощью Transform, как я могу масштабировать его и сохранить центральную точку там, где она есть (вместо верхней левой точки)? 20.07.2012
  • Нашел: ‹Setter Property=RenderTransformOrigin Value=0,5, 0,5/› -- еще раз спасибо KDiTraglia. 20.07.2012
  • @EvilClosetMonkey Да, я только что сам это понял, рад, что смог помочь (хотя я чувствую, что большую часть тяжелой работы вы сделали сами =)) 20.07.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..