简体   繁体   English

WPF:如何分配 IsMouseOver 和 IsPressed 按钮 State 背景从代码隐藏没有 XAML

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM