在WPF中按下更改默认按钮

时间:2012-07-18 11:40:19

标签: c# .net wpf xaml

我在WPF的包装面板中有两个按钮,其中一个按钮有IsDefault="True"。当我点击另一个时,我希望它成为“默认按钮”。

我意识到我可以通过听新闻事件以编程方式执行此操作,但我想要一个通用解决方案,不需要我在这里和那里连接大量代码。

2 个答案:

答案 0 :(得分:3)

如果要在更具说明性的会话中实现它,可以在Button的Clicked事件上定义WPF EventTrigger,并定义一个更改受影响按钮的IsDefault属性的Storyboard。 / p>

以下是展示我的意思的示例:

<Window x:Class="TriggerSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">   
    <StackPanel>
        <Button x:Name="one" Content="One">
            <Button.Style>
                <Style TargetType="Button">
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Click">
                            <BeginStoryboard>
                                <Storyboard >
                                    <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.IsEnabled)">
                                        <DiscreteBooleanKeyFrame Value="False" />
                                    </BooleanAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
        <Button Content="Two" />
    </StackPanel>
</Window>

它会更改IsEnabled属性,以便您可以测试它是否有效。然后你可以将它改为IsDefault属性(显然会得到值True)

答案 1 :(得分:1)

您可以创建InvertBooleanConverter并将第一个按钮的IsDefault属性绑定到第二个按钮上的反向,然后您只需使用触发器将IsDefault设置为关闭第一个按钮和第二个按钮会自动切换到开启状态!

<Button x:Name="B1" IsDefault="True"/>
<Button x:Name="B2" IsDefault="{Binding ElementName=B1, IsDefault, Converter={StaticResource InvertBooleanConverter}}"/>

如果你使用我的Bindings的回答中使用“Jan Kratochvil”样式触发器,那么在全XAML中这应该很容易。