0

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

我意识到我可以通过收听新闻事件以编程方式做到这一点,但我想要一个通用的解决方案,不需要我在这里和那里连接很多代码。

4

2 回答 2

3

如果您想在更具声明性的会话中实现它,您可以EventTrigger在按钮的 Clicked 事件上定义一个 WPF,并定义一个故事板来更改IsDefault受影响按钮的属性。

这是演示我的意思的示例:

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

于 2012-07-18T11:46:51.367 回答
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 中应该很容易工作。

于 2012-07-18T11:56:23.033 回答