Что эквивалентно идентификаторам классов HTML в WPF? - PullRequest
4 голосов
/ 30 ноября 2011

У меня есть несколько стековых панелей, которые я хочу иметь одинаковую ширину. Однако это не должно влиять на все StackPanels, и я не хочу подкласс только для этого. Я знаю, что возможно следующее:

<Style BasedOn="{StaticResource {x:Type TextBlock}}"
    TargetType="TextBlock"
    x:Key="TitleText">
        <Setter Property="FontSize" Value="26"/>
</Style>

...

<TextBlock Style="{StaticResource TitleText}"> 
    Some Text 
</TextBlock>

Но есть ли способ сохранить TextBlock в неведении относительно его стиля (например, когда HTML является отдельным от правила CSS, которое применяется к элементу)?

Я просто хотел бы присвоить всем соответствующим StackPanels один и тот же идентификатор класса, а затем применить стиль для идентификатора класса.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

К сожалению, это невозможно в WPF.Самое близкое к этому то, что вы продемонстрировали в своем примере.

Однако, если вы хотите применить стиль к всем StackPanels в того же Корневой контейнер, вы можете указать Стиль как ресурс корневого контейнера, оставив атрибут x:Key вне.Например:

<Grid x:Name="LayoutRoot">
    <Grid x:Name="StackPanelsRoot">
        <Grid.Resources>
            <Style TargetType="StackPanel">
                ...
            </Style>
        </Grid.Resources>
        <StackPanel x:Name="SP1" ... />
        <StackPanel x:Name="SP2" ... />
        ...
    </Grid>
    <StackPanel x:Name="SP3" ... />
    ...
</Grid>

Здесь стиль будет применяться к SP1 и SP2, но не к SP3

1 голос
/ 30 ноября 2011

К сожалению, нет, но вы можете создать присоединенное свойство , чтобы установить класс, а затем неявно применить стиль ко всем текстовым блокам, но использовать Triggers для этого присоединенного свойства, чтобы решить, какие сеттеры применить. Недостатком этого является то, что это, конечно, не очень хорошо, но функциональность стиля ограничена, так как вы не можете использовать триггеры в подстиле.

0 голосов
/ 30 ноября 2011

TargetType автоматически установит стиль для всех объектов этого типа. Если вы хотите, чтобы определенный TextBlock отказывался от стиля, вы можете сделать это следующим образом:

<TextBlock Style="{x:Null}"></TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...