Необходимо удостовериться, что usercontrol не установил, это - ширина в xaml файле usercontrol. Просто удалите Ширину = "..." от него, и Вы хороши для движения!
РЕДАКТИРОВАНИЕ: Это - код, с которым я протестировал его:
SOUserAnswerTest.xaml:
<UserControl x:Class="WpfApplication1.SOAnswerTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="LeftSideMenu" Width="100"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">a</TextBlock>
<TextBlock Grid.Column="1">b</TextBlock>
<TextBlock Grid.Column="2">c</TextBlock>
</Grid>
</UserControl>
Window1.xaml:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="415">
<Grid>
<local:SOAnswerTest Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2"/>
</Grid>
</Window>
my @VAR;
push @VAR, [ splice @array, 0, 3 ] while @array;
или вы можете использовать natatime
из List :: MoreUtils
use List::MoreUtils qw(natatime);
my @VAR;
{
my $iter = natatime 3, @array;
while( my @tmp = $iter->() ){
push @VAR, \@tmp;
}
}
Или так:
my $VAR;
while( my @list = splice( @array, 0, 3 ) ) {
push @$VAR, \@list;
}
Мне очень нравится List :: MoreUtils, и я часто его использую. Однако мне никогда не нравилась функция natatime
. Он не производит вывод, который можно использовать с циклом for или map
или grep
.
Мне нравится связывать в коде операции map / grep / apply. Как только вы поймете, как работают эти функции, они могут быть очень выразительными и мощными.
Но легко заставить функцию работать как natatime, которая возвращает список ссылок на массив.
sub group_by ($@) {
my $n = shift;
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, [ splice @array, 0, $n ] while @array;
return @groups;
}
Теперь вы можете делать такие вещи, как:
my @grouped = map [ reverse @$_ ],
group_by 3, @array;
** Обновите предложения Криса Лутца **
Крис , Я вижу достоинства в предложенном вами добавлении ссылки на код в интерфейс. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Я думаю, что мне больше нравится то, что я написал. изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API. Как только вы поймете, как работают эти функции, они могут быть очень выразительными и мощными.
Но легко заставить функцию работать как natatime, которая возвращает список ссылок на массив.
sub group_by ($@) {
my $n = shift;
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, [ splice @array, 0, $n ] while @array;
return @groups;
}
Теперь вы можете делать такие вещи, как:
my @grouped = map [ reverse @$_ ],
group_by 3, @array;
** Обновите предложения Криса Лутца **
Крис , Я вижу достоинства в предложенном вами добавлении ссылки на код в интерфейс. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API. Как только вы поймете, как работают эти функции, они могут быть очень выразительными и мощными.
Но легко заставить функцию работать как natatime, которая возвращает список ссылок на массив.
sub group_by ($@) {
my $n = shift;
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, [ splice @array, 0, $n ] while @array;
return @groups;
}
Теперь вы можете делать такие вещи, как:
my @grouped = map [ reverse @$_ ],
group_by 3, @array;
** Обновите предложения Криса Лутца **
Крис , Я вижу достоинства в предложенном вами добавлении ссылки на код в интерфейс. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API.
Но легко заставить функцию работать как natatime, которая возвращает список ссылок на массив.
sub group_by ($@) {
my $n = shift;
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, [ splice @array, 0, $n ] while @array;
return @groups;
}
Теперь вы можете делать такие вещи, как:
my @grouped = map [ reverse @$_ ],
group_by 3, @array;
** Обновите предложения Криса Лутца **
Крис , Я вижу достоинства в предложенном вами добавлении ссылки на код в интерфейс. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API.
Но легко заставить функцию работать как natatime, которая возвращает список ссылок на массив.
sub group_by ($@) {
my $n = shift;
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, [ splice @array, 0, $n ] while @array;
return @groups;
}
Теперь вы можете делать такие вещи, как:
my @grouped = map [ reverse @$_ ],
group_by 3, @array;
** Обновите предложения Криса Лутца **
Крис , Я вижу достоинства в предложенном вами добавлении ссылки на код в интерфейс. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API. Таким образом, встроено поведение, подобное карте.
# equivalent to my map/group_by above
group_by { [ reverse @_ ] } 3, @array;
Это красиво и лаконично. Но чтобы сохранить прекрасную семантику ссылки кода {}
, мы поместили аргумент count 3
в труднодоступное место.
Думаю, мне больше нравится то, что я написал изначально.
Связанная карта не намного более подробна, чем то, что мы получаем с расширенным API. При исходном подходе grep или другую аналогичную функцию можно использовать без необходимости ее повторной реализации.
Например, если ссылка на код добавляется в API, вам необходимо выполнить:
my @result = group_by { $_[0] =~ /foo/ ? [@_] : () } 3, @array;
, чтобы получить эквивалент:
my @result = grep $_->[0] =~ /foo/,
group_by 3, @array;
Поскольку я предложил это для упрощения цепочки, мне больше нравится оригинал.
Конечно, было бы легко разрешить любую форму:
sub _copy_to_ref { [ @_ ] }
sub group_by ($@) {
my $code = \&_copy_to_ref;
my $n = shift;
if( reftype $n eq 'CODE' ) {
$code = $n;
$n = shift;
}
my @array = @_;
croak "group_by count argument must be a non-zero positive integer"
unless $n > 0 and int($n) == $n;
my @groups;
push @groups, $code->(splice @array, 0, $n) while @array;
return @groups;
}
Теперь любая форма должна работать (непроверено). Я не уверен, нравится ли мне оригинальный API или этот со встроенными возможностями карты.
Кто-нибудь думает?
** Обновлено снова **
Крис прав, указывая, что необязательный версия кода ref вынудила бы пользователей сделать:
group_by sub { foo }, 3, @array;
Что не очень хорошо и противоречит ожиданиям. Поскольку нет способа получить гибкий прототип (о котором я знаю), это ставит крест на расширенном API, и я бы придерживался оригинала.
Кстати, я начал с анонимной подпрограммы в альтернативном API, но я изменил ее на именованную подпрограмму, потому что меня слегка беспокоило то, как выглядит код. Никакой уважительной причины, просто интуитивная реакция. Не знаю, имеет ли это значение в любом случае.
Другой ответ (вариант Tore, использующий сплайсинг, но избегающий цикла while в пользу большего количества Perl-y map)
my $result = [ map { [splice(@array, 0, 3)] } (1 .. (scalar(@array) + 2) % 3) ];
Попробуйте следующее:
$VAR = [map $_ % 3 == 0 ? ([ $array[$_], $array[$_ + 1], $array[$_ + 2] ])
: (),
0..$#array];