#wpf #xaml #triggers #styles
#wpf #xaml #триггеры #стили
Вопрос:
Ну, я думаю, я что-то здесь упускаю..
Каким-либо образом я пытаюсь создать тему wpf в стиле metro, поэтому я начал с этого:
<Color x:Key="PrimaryColor">#8CBF26</Color>
<Color x:Key="TextColor">White</Color>
<Color x:Key="BackgroundColor">Black</Color>
<SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource ResourceKey=PrimaryColor}" />
<SolidColorBrush x:Key="ForgroundBrush" Color="{StaticResource ResourceKey=TextColor}" />
<SolidColorBrush x:Key="BackgroundBrush" Color="{StaticResource ResourceKey=BackgroundColor}" />
<FontFamily x:Key="FontFamily">Segoe WP, Segoe UI, Lucida Sans Unicode, Verdana</FontFamily>
<Style TargetType="{x:Type Window}">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}" />
</Style>
<Style TargetType="{x:Type Run}">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontFamily" Value="{StaticResource FontFamily}" />
<Setter Property="Foreground" Value="{StaticResource ForgroundBrush}" />
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontFamily" Value="{StaticResource FontFamily}" />
<Setter Property="Foreground" Value="{StaticResource ForgroundBrush}" />
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ForgroundBrush}"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Foreground" Value="{StaticResource ForgroundBrush}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" >
<ContentPresenter Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{StaticResource ForgroundBrush}" />
<Setter Property="Foreground" Value="{StaticResource BackgroundBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Ну, это отлично работает для всех, кроме триггера, свойство Foreground никогда не изменяется, я предполагаю, что текстовый блок уже стилизован, поэтому он не может переопределить его forecolor есть ли какое-либо решение этой проблемы??
Спасибо
Ответ №1:
Редактировать: TextBlock
стиль применяется внутри ControlTemplate
Button
как-то переопределяя свой собственный стиль. Не уверен, что с этим делать.
Работает для меня, вы установили a Foreground
для Button
экземпляра? Если это так, это переопределит триггер из-за приоритета.
Комментарии:
1. в стиле кнопки я определяю как передний план, так и фон… стиль применяется, но цвет переднего плана не изменяется при нажатии кнопки…
2. @Petoj: Ну, как я уже сказал, для меня это имеет значение. Я просто скопировал все это в некоторые ресурсы, создал кнопку, и при нажатии фон становится белым, а передний план — черным.
3. Я в полном замешательстве, я думаю, я попытаюсь создать фиктивный проект и попробовать его там!
4. Хорошо, там это сработало, теперь мне просто нужно выяснить, почему это не работает в моем основном проекте…
5. @Petoj: Вы пробовали это в «обычных» ресурсах, потому что, если вы разместите его в
Application.Resources
стиле forTextBlock
, это будет мешать стилю кнопки. Вам действительно это нужно?