繁体   English   中英

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

[英]Cant set Style in Trigger wpf

我想在切换按钮选中时更改样式

<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>

但我的代码无法正常工作,应用崩溃

正如@clemens所建议的那样,正确的方法是拥有模板并在具有TargetName controlTemplate应用

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

在视图上:

    <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();
        }

    }

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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