WPF按钮的常用样式"启用"和"禁用"状态

时间:2016-09-03 08:01:32

标签: .net wpf xaml exception button

我尝试为启用或禁用WPF按钮提供常用样式:

function my_login_redirect( $redirect_to, $request, $user ) {
 $username = $user->user_login;
 $url = home_url( "/connections/$username/profile/edit/group/1/" ); 
 if ( isset( $user->roles ) && is_array( $user->roles ) ) {
    if ( in_array( 'administrator', $user->roles ) ) {
       return $redirect_to;
    } else {
        return esc_url( $url );
    }
 } else {
    return $redirect_to;
 }
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

和我的按钮:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
             //noinspection deprecation
              logoImageMaster.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    } else {
             logoImageMaster.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
activityInterface.doSpecialLogic();

这会在运行时产生以下异常。

    <Style x:Name="btnStyle" x:Key="btnStyle" TargetType="{x:Type Button}">
        <Setter Property="Foreground"  Value="#FFFFFFFF"/>
        <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Style" Value="{DynamicResource btnStyle}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Style" Value="{DynamicResource btnStyle}" />
            </Trigger>
        </Style.Triggers>
    </Style>

如何将此常用样式应用于我的按钮的两个状态?我是否可以在不使用样式覆盖按钮的模板的情况下完成?

2 个答案:

答案 0 :(得分:4)

您的btnStyle是一种样式,启用或禁用时要更改的所有属性都会进入触发器内部,例如

&#xA;&#xA;
 &lt; Style x :Name =“btnStyle”x:Key =“btnStyle”TargetType =“{x:Type Button}”&gt;&#xA; &lt; Setter Property =“Foreground”Value =“#FFFFFFFF”/&gt;&#xA; &lt; Setter Property =“BorderBrush”Value =“#FFCFFFFF”/&gt;&#xA; &LT; Style.Triggers&GT;&#XA; &lt; Trigger Property =“IsEnabled”Value =“True”&gt;&#xA; &lt; Setter Property =“Content”Value =“Enabled”/&gt;&#xA; &LT; /触发&GT;&#XA; &lt; Trigger Property =“IsEnabled”Value =“False”&gt;&#xA; &lt; Setter Property =“Content”Value =“Disabled”/&gt;&#xA; &LT; /触发&GT;&#XA; &LT; /Style.Triggers>&#XA;&LT; /样式和GT;&#XA;  
&#XA;

答案 1 :(得分:1)

我在@ adminSoftDK的答案帮助下找到了我的解决方案。我在两个触发器属性上设置了相同的样式。

<Style x:Key="btnStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="True">
            <Setter Property="Foreground"  Value="#FFFFFFFF"/>
            <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground"  Value="#FFFFFFFF"/>
            <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
        </Trigger>
    </Style.Triggers>
</Style>