WPF

2012-07-18 29 views
0

更改默認按鈕我在WPF的包裝面板中有兩個按鈕,其中一個有IsDefault="True"。當我點擊另一個時,我希望它成爲「默認按鈕」。WPF

我意識到我可以通過聽新聞事件來編程,但我想要一個通用的解決方案,不需要我在這裏和那裏連接大量的代碼。

回答

3

如果要在更多聲明性會話中實現它,可以在Button的Clicked事件上定義WPF EventTrigger,並定義一個Storyboard來更改受影響按鈕的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值)

+0

我看到的方式是,這裏的想法是將'IsEnabled'設置爲'false',以便點擊任何按鈕? WPF中沒有任何「按鈕組」的概念,你可以將按鈕包裝在一個容器中,然後有代碼監聽按鈕組內任何按鈕的單擊,然後處理這些? – Tower 2012-07-21 16:21:24

1

您可以創建InvertBooleanConverter並將第一個按鈕的IsDefault屬性綁定到第二個按鈕上的反轉,然後您只需設置IsDefault使用第一個按鈕上的觸發器關閉,第二個按鈕會自動切換到開啓!

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

如果使用「賈恩·克拉託赫維爾」風格,從他與我綁定的回答觸發這應該很容易在全XAML。

+0

這是否適用於多個按鈕? – Tower 2012-07-18 12:11:39

+0

恐怕不是!作爲一個布爾值只有2個狀態;) – Kolky 2012-07-18 12:14:07