[英]WPF: How to assign IsMouseOver and IsPressed Button State backgrounds from Code Behind no XAML
I have some runtime generated WPF buttons that I need to style using code behind.我有一些运行时生成的 WPF 按钮,我需要使用后面的代码对其进行样式设置。 I have the Style below in a code behind variable ( Style Editstyle = Application.Current.Resources[x] as Style;)
我在变量后面的代码中有下面的样式( Style Editstyle = Application.Current.Resources[x] as Style;)
How would I change the DynamicResource of the values in the Trigger section from codebehind?如何从代码隐藏更改触发器部分中值的 DynamicResource? Like style.Trigger.IsFocused.Background = bitmapX;
像style.Trigger.IsFocused.Background = bitmapX; Also style.Key="NewStyleCopy1";
还有 style.Key="NewStyleCopy1";
<Style x:Key="INIT_A" TargetType="Button">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Background" Value="{DynamicResource back}" />
<Setter Property="Foreground" Value="{DynamicResource fore}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderBrush="{DynamicResource stroke}"
BorderThickness="1"
Padding="4,2"
CornerRadius="0"
Background="{TemplateBinding Background}">
<Grid>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="content" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="{DynamicResource altback}" />
<Setter Property="Foreground" Value="{DynamicResource altfore}" />
<Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource altstroke}" />
<Setter Property="Button.Effect" Value="{DynamicResource a_hbtnglow}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource altback}" />
<Setter Property="Foreground" Value="{DynamicResource altfore}" />
<Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource altstroke}" />
<Setter Property="Button.Effect" Value="{DynamicResource a_hbtnglow}" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{DynamicResource altback}" />
<Setter Property="Foreground" Value="{DynamicResource altfore}" />
<Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource altstroke}" />
<Setter Property="Button.Effect" Value="{DynamicResource a_hbtnglow}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
This is usually done in XAML by defining a Trigger
for each state:这通常在 XAML 中通过为每个 state 定义一个
Trigger
来完成:
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
You can make use of the Style.BasedOn
property to extend a particular Style
, for example a default Style
for all Button
elements.您可以使用
Style.BasedOn
属性来扩展特定的Style
,例如所有Button
元素的默认Style
。 This way you can create a more specific Style
that includes all attributes of the base Style
:通过这种方式,您可以创建一个更具体的
Style
,其中包含基本Style
的所有属性:
<Style x:Key="DefaultButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Orange" />
</Style>
<Style x:Key="GeneratedButtonsStyle"
BasedOn="{StaticResource DefaultButtonStyle}"
TargetType="Button">
<!-- Override the base Style value -->
<Setter Property="Background" Value="Yellow" />
<!-- Extend the base Style -->
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
I ended up copying the style and edited the properties.我最终复制了样式并编辑了属性。 I appreciate all your suggestions.
我很感激你的所有建议。
var xu = styleCopy("ButtonAA");
Trigger t = new Trigger();
t.Property = Button.IsMouseOverProperty;
t.Value = true;
Setter setter = new Setter();
setter.Property = Button.BackgroundProperty;
setter.Value = Brushes.Blue;
t.Setters.Add(setter);
xu.Triggers.Add(t);
btn.Style = xu;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.