Триггерные участники набора должны иметь тип EventTrigger

Вы хотите, чтобы все combinations() от 1 до длины массива.

val arr = Array(4, 3, 1)

arr.indices.flatMap(x => arr.combinations(x + 1))
//res0: Seq[Array[Int]] = Vector(Array(4), Array(3), Array(1), Array(4, 3), Array(4, 1), Array(3, 1), Array(4, 3, 1))

update

Это даст вам все возможные комбинации, сохраняя оригинальный порядок и дублирующиеся элементы.

def subseqs[A](seq :Seq[A]) :List[Seq[A]] = seq match {
  case hd +: tl =>
    val res = subseqs(tl)
    Seq(hd) :: res ++ res.map(hd +: _)
  case Seq() => Nil
}

Результатом является List из n ^ 2 - 1 возможных подпоследовательностей. Таким образом, для набора из 8 элементов вы получите 255 подпоследовательностей.

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

Гораздо лучше генерировать только увеличивающиеся подпоследовательности и находить самые длинные из этого набора (9 строк кода).

25
задан Richard McGuire 7 May 2009 в 19:56
поделиться

2 ответа

Удалось это выяснить. Забыл, что DataTriggers предназначены для Style, ControlTemplate и DataTemplate согласно Документам MSDN.

Решением было использование EventTrigger в качестве указанного сообщения об ошибке. Мое решение заключалось в следующем:

<EventTrigger RoutedEvent="ToggleButton.Checked">
    <BeginStoryboard>
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                           Storyboard.TargetName="LaunchButtons">
                <DiscreteObjectKeyFrame KeyTime="0:0:0"
                                        Value="{x:Static Visibility.Visible}" />
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked">
    <BeginStoryboard>
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                           Storyboard.TargetName="LaunchButtons">
                <DiscreteObjectKeyFrame KeyTime="0:0:0"
                                        Value="{x:Static Visibility.Collapsed}" />
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>
 </EventTrigger>

Собираюсь пометить это как ответ, если у кого-то есть другое решение.

14
ответ дан 28 November 2019 в 18:25
поделиться

You could also bind the Visibility in your stackpanel to the IsChecked property in the ToggleButton. You would need to use a custom ValueConverter. Here is one I found online:

/// <summary>  
/// WPF/Silverlight ValueConverter : Convert boolean to XAML Visibility
/// </summary>  
[ValueConversion(typeof(bool), typeof(Visibility))]
public class VisibilityConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return (value != null && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
    Visibility visibility = (Visibility)value;
    return (visibility == Visibility.Visible);
  }
}
4
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

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