2010-12-01 2 views

ответ

0

Поместите свой StackPanel внутри элемента Border и установите Border Padding на «10 0»

+1

Зачем нужна граница, если у StackPanel есть свойство Margin? Это также не учитывает разницу между каждым ребенком, которую, вероятно, хочет сделать ОП. – 2010-12-01 20:47:33

2

Я боюсь, что это не возможно, декларативно в XAML с StackPanel непосредственно. Концептуальная философия в Silverlight/WPF заключается в том, что группа не должна изменять свойства своих детей. Таким образом, вы могли бы реализовать свою собственную панель, которая делает это в любом случае, или вы могли бы использовать ItemsControl вроде:

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ContentPresenter Margin="10,0" Content="{Binding Content}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

    [...] 

</ItemsControl> 

ItemsControl использует StackPanel по умолчанию, вы можете использовать его свойство ItemsPanel определить другую панель как ItemsPanelTemplate если вы так хотите.

+0

Вы также можете обеспечить, чтобы ItemControl вел себя как StackPanel, указав его «ItemsPanel» как StackPanel. Хотя это, скорее всего, значение по умолчанию. По крайней мере, таким образом вы можете контролировать ориентацию. – 2010-12-01 20:46:17

0

Вы также можете сделать это программно; ваш StackPanel имеет коллекцию Children. Вы можете использовать это, чтобы перебирать их и устанавливать маржу.

1

Как я могу это сделать, это определить неявные стили в ресурсах StackPanel для каждого типа управления, который будет использоваться в StackPanel. Чтобы сохранить определение значения несколько раз для каждого типа управления, вы можете создать именованный базовый стиль, который нацелен на FrameworkElement и определяет стиль (ы), из которого может наследоваться стиль для каждого типа элемента управления. Пример приведен ниже:

<StackPanel Orientation="Horizontal"> 
    <StackPanel.Resources> 
     <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
      <Setter Property="Margin" Value="10,0" /> 
     </Style> 
     <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}" /> 
     <Style TargetType="TextBlock" BasedOn="{StaticResource CommonStyle}" /> 
     <Style TargetType="CheckBox" BasedOn="{StaticResource CommonStyle}" /> 
    </StackPanel.Resources> 

    <Button>Button</Button> 
    <TextBlock Text="Text" /> 
    <CheckBox>Check Box</CheckBox> 
</StackPanel> 

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

Надеется, что это помогает ...

Крису Андерсон

PS. Блатантное самоопределение - это основано на трюке наследования в моей книге Pro Business Applications with Silverlight 4 :).

Смежные вопросы