ItemContainerStyle, переопределяющий общий стиль - PullRequest
1 голос
/ 06 января 2011

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

<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.

ТИА

Ответы [ 2 ]

2 голосов
/ 20 июня 2014

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

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

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

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

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

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

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

0 голосов
/ 06 января 2011

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

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

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

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