2017-02-17 11 views
0

저는 AppBarButton을 사용하고 있습니다. 하나의 조건을 기반으로 AppBarButton 클릭 또는 플라이 아웃을 추가 입력으로 실행하려는 경우, 플라이 아웃이 appbar 버튼에있을 때 항상 버튼을 누르면 열립니다. 클릭 수플라이 아웃 개방을 동적으로 방지합니다.

플라이 아웃을 허용 할 위치를 결정할 수있는 방법이 있습니까? 컨트롤이 버튼 클래스로부터 파생되는 경우

<AppBarButton x:Uid="Accept" Label="Accept" 
         ToolTipService.ToolTip="{Binding Label, RelativeSource={RelativeSource Mode=Self}}" 
         Icon="Accept" 
         Command="{Binding AcceptAppBarCommand}" 
         behaviors:AppBarButtonBehavior.AllowFocusOnInteraction="True"> 
      <AppBarButton.Flyout> 
       <Flyout Placement="Bottom" > 
        <StackPanel Width="200"> 
         <PasswordBox Header="Enter password:" 
            Password="{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
         <Button Margin="0 5 0 0" Content="Accept" 
           Command="{Binding AcceptCommand}"> 
         </Button> 
        </StackPanel> 
       </Flyout> 
      </AppBarButton.Flyout> 
     </AppBarButton> 

답변

0

일반적 플라이 아웃이 자동적으로 보여되고 상기 사용자가 버튼을 클릭하면

버튼에 연결된 플라이 아웃이 자동적으로 열린다. 플라이 아웃을 열려면 이벤트를 처리 할 필요가 없습니다.

플라이 아웃을 플라이 아웃 속성에 추가하면 일반적으로 발생합니다. 당신에 대한 자세한 정보를 찾고 있다면

private void AppBarButton_Click(object sender, RoutedEventArgs e) 
{ 
    // in command, click or anywhere else (in that change move to suitable resources) 
    FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement); 
} 

:

<AppBarButton x:Uid="Accept" Label="Accept" 
       ToolTipService.ToolTip="{Binding Label, RelativeSource={RelativeSource Mode=Self}}" 
       Icon="Accept" 
       Command="{Binding AcceptAppBarCommand}" 
       Click="AppBarButton_Click"> <!-- for sample --> 
    <FlyoutBase.AttachedFlyout> 
     <Flyout Placement="Bottom" x:Key="myFlyout" > 
      <StackPanel Width="200"> 
       <PasswordBox Header="Enter password:" 
          Password="{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
       <Button Margin="0 5 0 0" Content="Accept" 
         Command="{Binding AcceptCommand}"> 
       </Button> 
      </StackPanel> 
     </Flyout> 
    </FlyoutBase.AttachedFlyout> 
</AppBarButton> 

와 쇼를 필요로 할 때 : 당신이하지 그런 행동 다음 에 의해 플라이 아웃을 첨부 할 수없는 경우는, 자원에 추가을 FlyoutBase 도우미 클래스/MVVM보다 친숙해질 수있는 메소드를 작성하면 at Macrominevra blog post, Depechie's postShawn Kendrot's이 나타납니다.

+0

이 Ans는 MVVM 패턴이 아닌 코드 숨김을 통해 문제를 해결하지만 작동합니다. –

+0

@RahulSonone MVVM조차도 약간의 코드가 필요합니다. 답을 살펴보십시오. 스타일 변경 때문에 이것이 확실한가요? 나는 플라이 아웃 (Border)의 내용을 숨기면 죽을 것이라고 생각합니다. 그러면 간단히 표시되지 않습니다. 나는 대답을 편집하고 MVVM의 경우 유용 할 수있는 몇 가지 링크를 추가했습니다. – Romasz

+0

https://marcominerva.wordpress.com/2015/01/15/how-to-open-and-close-flyouts-in-universal-apps-using-mvvm/ 내가 사용할 수있는 좋은 하나이지만 시간 스타일이 나를 위해 잘 작동합니다. –

0

하나의 해결 방법을 스타일별로 발견했습니다.

<Page.Resources> 

    <Style TargetType="FlyoutPresenter" x:Key="_hiddenFlyoutStyle"> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="BorderThickness" Value="0" /> 
     <Setter Property="Padding" Value="0" /> 
    </Style> 

    <Style TargetType="Border" x:Key="_flyoutBorderStyle"> 
     <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}"/> 
     <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeHighBrush}"/> 
     <Setter Property="BorderThickness" Value="{ThemeResource FlyoutBorderThemeThickness}"/> 
     <Setter Property="Padding" Value="{ThemeResource FlyoutContentThemePadding}"/> 
     <Setter Property="MinWidth" Value="{ThemeResource FlyoutThemeMinWidth}"/> 
     <Setter Property="MaxWidth" Value="{ThemeResource FlyoutThemeMaxWidth}"/> 
     <Setter Property="MinHeight" Value="{ThemeResource FlyoutThemeMinHeight}"/> 
     <Setter Property="MaxHeight" Value="{ThemeResource FlyoutThemeMaxHeight}"/> 
     <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    </Style> 
</Page.Resources> 

하는 플라이 아웃하는 스타일과 테두리 적용 자원의 스타일을 만들 수 있습니다.

<AppBarButton x:Uid="Accept" Label="Accept" 
         ToolTipService.ToolTip="{Binding Label, RelativeSource={RelativeSource Mode=Self}}" 
         Icon="Accept" 
         Command="{Binding AcceptAppBarCommand}" 
         behaviors:AppBarButtonBehavior.AllowFocusOnInteraction="True"> 
      <AppBarButton.Flyout> 
       <Flyout Placement="Bottom" FlyoutPresenterStyle="{StaticResource _hiddenFlyoutStyle}"> 
        <Border Visibility="{Binding DisplayFlyout, Converter={StaticResource BooleanToVisibilityConverter}}" 
          Style="{StaticResource _flyoutBorderStyle}"> 
         <StackPanel Width="200"> 
          <PasswordBox Header="Enter password:" 
            Password="{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
          <Button Margin="0 5 0 0" Content="Accept" 
           Command="{Binding AcceptCommand}"> 
          </Button> 
         </StackPanel> 
        </Border> 
       </Flyout> 
      </AppBarButton.Flyout> 
     </AppBarButton> 

DisplayFlyout은 플라이 아웃을 표시 할시기를 결정하기위한 viewmodel의 bool 속성입니다.

+0

https://marcominerva.wordpress.com/2015/01/15/how-to-open-and-close-flyouts-in-universal-apps-using-mvvm/ 이것은 첨부 된 도움으로도 좋습니다 재산. –