2011-01-05 1 views
1

Я ссылаюсь на ExpressionDark.xaml из моего App.xaml, который отлично работает, однако, когда я пытаюсь использовать ItemContainerStyle в ItemsControl, элементы в ItemsControl возвращаются к основному стилю.ItemContainerStyle overriding Общий стиль

<ItemsControl Grid.Column="1" VerticalAlignment="Center" Margin="10"> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Margin" Value="5" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.Items> 
     <TextBlock Text="{Binding Error}" /> 
     <TextBox Text="{Binding Path=Username,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <TextBox Text="{Binding Path=Password,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <Button VerticalAlignment="Center" HorizontalAlignment="Right" Command="{Binding SignInCommand}" IsEnabled="{Binding CanSignIn}" Content="Sign In"></Button> 
     <TextBox Text="{Binding Path=Username}"></TextBox> 
    </ItemsControl.Items> 
</ItemsControl> 

Я только пытаюсь найти хорошее управление для вертикальной укладки (легко добавлять маржу между элементами), так что, возможно, есть лучший способ, который не отменяет стиль, указанный в App.xaml.

ТИА

ответ

0

Они, как вы используете запас хорошо, но когда вы используете другой стиль, то один в App.xaml, он duffently не будет использовать один в App.xaml.

Это способ, которым он работает в WPF, элемент управления использует стиль «ближайший» к нему, и поскольку вы пишете этот стиль непосредственно в элементе управления, он использует этот стиль.

вы можете создать новый стиль в app.xaml со свойством «BaseOn» на основе ExpressionDark.xaml, но вы будете добавлять:

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

Но какое это свойство будет «BasedOn»? Я бы не подумал, что ExpressionDark.xaml указывает любой ItemContainerStyle? – Ian

+0

Хм, может быть, я вас неправильно понял, я думал, что ExpressionDark.xaml был стилем ... если он есть, или если он содержит стиль, вы можете дать этому стилю ключ, а «BasedOn» получит этот ключ. , то вы добавите элемент настройки контейнера элементов. – Notter

2

Если задан стиль «на месте», он считается совершенно новым стилем. Из-за этого стиль по умолчанию от ExpressionDark.xaml является забытым для этого элемента.

То, что вы должны сделать, чтобы избежать этого: обратитесь к базовому типу с BasedOn =

<ItemsControl.ItemContainerStyle> 
    <Style BasedOn="{StaticResource Existing}"> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

Найти соответствующий стиль по умолчанию для элемента управления. И замените Existing на Resource-Key от ExpressionDark.xaml. Вы можете идентифицировать его, потому что он будет иметь соответствующий набор TargetType свойства:

<Style TargetType="{x:Type ListBoxItem}"> x:Key=... 

Где ListBoxItem находится элемент управления в использовании (быть рестайлинг)

Вы можете рассмотреть возможность использования ListBox вместо ItemsControl, как это имеет ListBoxItem как контейнер.

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

  • Нет связанных вопросов^_^