我在WPF的包装面板中有两个按钮,其中一个按钮有IsDefault="True"
。当我点击另一个时,我希望它成为“默认按钮”。
我意识到我可以通过听新闻事件以编程方式执行此操作,但我想要一个通用解决方案,不需要我在这里和那里连接大量代码。
答案 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中这应该很容易。