我在 WPF 的包装面板中有两个按钮,其中一个有IsDefault="True"
. 当我单击另一个时,我希望它成为“默认按钮”。
我意识到我可以通过收听新闻事件以编程方式做到这一点,但我想要一个通用的解决方案,不需要我在这里和那里连接很多代码。
如果您想在更具声明性的会话中实现它,您可以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)
您可以创建一个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 中应该很容易工作。