2012-07-18 4 views
0

WPF의 랩 패널에 두 개의 버튼이 있고 그 중 하나에 IsDefault="True"이 있습니다. 다른 버튼을 클릭하면 "기본 버튼"이됩니다.WPF에서 기본 버튼 변경

프레스 이벤트를 듣는 것으로 프로그래밍 방식으로이 작업을 수행 할 수 있다는 것을 알았지 만, 여기저기서 많은 코드를 연결해야 할 필요가없는 보편적 인 솔루션이 필요합니다.

답변

3

더 선언적인 세션에서 구현하려는 경우 Button의 Clicked 이벤트에 WPF EventTrigger을 정의하고 영향을받는 버튼의 속성을 변경하는 스토리 보드를 정의 할 수 있습니다. 당신이 작동하는지 테스트 할 수 있도록

<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

1

두 번째 버튼의 첫 번째 버튼 IsDefault 속성을 역수로 바인딩하면 다음과 같이 설정해야합니다. IsDefault을 첫 번째 버튼에서 트리거를 사용하여 끄고 두 번째 버튼이 자동으로 켜집니다! 당신이 사용하는 경우

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

"얀 크라 토치 빌"스타일이 전체 XAML에서 쉽게 작동합니다 내 바인딩에 그의 대답에서 트리거.

+0

이 버튼이 여러 개 작동합니까? – Tower

+0

나는 두렵다! 부울은 단지 2 개의 상태를 가짐) – Kolky