为了账号安全,请及时绑定邮箱和手机立即绑定

在触发器 wpf 中无法设置样式

在触发器 wpf 中无法设置样式

C#
慕虎7371278 2022-08-20 17:03:14
我想在选中切换按钮时更改样式<ToggleButton.Style>                <Style TargetType="ToggleButton" BasedOn="{StaticResource ToggleButtonPrimary}">                    <Style.Triggers>                        <DataTrigger Binding="{Binding ElementName=ButtonNude, Path=IsChecked}" Value="True">                            <Setter Property="Style" Value="{StaticResource ToggleButtonDanger}"/>                        </DataTrigger>                    </Style.Triggers>                </Style>            </ToggleButton.Style>但我的代码不起作用,应用程序崩溃
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

正确的方法是使用模板并应用controlTemplateTargetName


还有一种(可能是丑陋的)方法:


在视图:


    <StackPanel>

            <StackPanel.Resources>

                <local:Myconverter x:Key="MyConverter" />


                <Style TargetType="ToggleButton" x:Key="ToggleButtonPrimary">

                    <Setter Property="Background" Value="blue" />

                </Style>


                <Style TargetType="ToggleButton" x:Key="ToggleButtonDanger">

                    <Setter Property="Background" Value="Red" />

                </Style>

            </StackPanel.Resources>


            <CheckBox Margin="20" x:Name="chk" />


            <ToggleButton Width="100" Height="100" >

                <ToggleButton.Style>

                    <MultiBinding Converter="{StaticResource MyConverter}">

                        <MultiBinding.Bindings>

                            <Binding ElementName="chk" Path="IsChecked"/>                            

                            <Binding RelativeSource="{RelativeSource AncestorType=StackPanel}"/>                            

                        </MultiBinding.Bindings>

                    </MultiBinding>

                </ToggleButton.Style>            

            </ToggleButton>

        </StackPanel>

转炉:


    public class Myconverter : IMultiValueConverter

    {

        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)

        {

            if ((bool)values[0])

            {

                return (values[1] as FrameworkElement).Resources["ToggleButtonDanger"];

            }

            else

                return (values[1] as FrameworkElement).Resources["ToggleButtonPrimary"];            

        }



        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)

        {

            throw new NotImplementedException();

        }


    }


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号