Можно ли применять стиль WPF к разным типам одновременно? - PullRequest
4 голосов
/ 17 ноября 2010

Я хочу создать стиль, который можно применять к различным типам элементов управления. Примерно так:

<ToolBar>
    <ToolBar.Resources>
        <Style TargetType="Control">
            <Setter Property="Margin" Value="1"/>
            <Setter Property="Padding" Value="0"/>
        </Style>
    </ToolBar.Resources>

    <ComboBox .../>
    <Button .../>
</ToolBar>

И это должно применяться к ComboBox и Button. Но это не работает, как я написал здесь.

Возможно ли это как-нибудь? Нацелиться только на предка этих классов, как Control? Если нет, то как лучше применить общие настройки к группе элементов управления?

Ответы [ 2 ]

9 голосов
/ 17 ноября 2010

Обновление

См. это обсуждение интересного подхода

См. этот вопрос

Создаваемый вами стиль предназначен только для элемента управления, а не для элементов, производных от элемента управления.Когда вы не устанавливаете x: Key, вы неявно устанавливаете x: Key в TargetType, поэтому, если TargetType = "Control", тогда x: Key = "Control".Я не думаю, что есть какой-либо прямой способ сделать это.

Ваши варианты

<Style x:Key="ControlBaseStyle" TargetType="Control">  
    <Setter Property="Margin" Value="1"/>  
    <Setter Property="Padding" Value="0"/>  
</Style>  

Назначьте все кнопки и комбинированные списки, например

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/> 
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource ControlBaseStyle}"/> 

или используйтестиль прямо на контроле

<Button Style="{StaticResource ControlBaseStyle}" ...>
<ComboBox Style="{StaticResource ControlBaseStyle}" ...>
0 голосов
/ 17 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...