2017-10-27 1 views
0

대기중인 대부분의 데스크탑 응용 프로그램에서 마우스 커서가 대기 커서로 바뀝니다. 분명히 전화는 약간 다릅니다. 그러나 UWP에서는 비동기 작업이 진행되는 동안 마우스 커서를 대기 커서로 변경해야합니다.Xamarin Forms - 커서를 대기 커서로 변경

표준 Xamarin Forms에서이 작업을 수행 할 수있는 방법이 있습니까? 또는 타사 라이브러리가 있습니까?

휴대 전화에는 뭔가 발생하고 있다는 시각적 인 표시기가 있습니다. 나는. 키보드 색 변경 또는 이와 유사한.

그렇지 않다면 각 플랫폼에 대한 종속성 삽입 코드를 구현해야 할 것입니다. 어떤 팁?

답변

1

아닌 UWP 질문에 대한 답변, 그러나 이것은 당신이 휴대 전화에서 일을 처리 할 수있는 방법입니다

당신은 전체 페이지를 통해 Grid을 추가하고 회색의 나머지 때문에 반 투명하게 만들 수있는 당신의 페이지가 회색으로 표시됩니다. 그런 다음 Grid 중간에 ActivityIndicator을 추가하여로드 중임을 나타냅니다. GridIsVisible을 무언가가로드되고 있음을 나타내는 bool 값으로 설정하십시오.

이 내 페이지 중 하나에 무엇을 가지고 있습니다 :

<Grid BackgroundColor="##60000000" 
     IsVisible="{Binding IsLoading}"> 
    <Grid VerticalOptions="CenterAndExpand"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width=".5*" /> 
      <ColumnDefinition Width="9*" /> 
      <ColumnDefinition Width=".5*" /> 
     </Grid.ColumnDefinitions> 
     <Frame Grid.Column="1" 
       HorizontalOptions="Center" 
       VerticalOptions="Center" 
       Padding="0" 
       HasShadow="True" 
       OutlineColor="#e6e6e6"> 
      <Grid BackgroundColor="White" 
        RowSpacing="0" 
        ColumnSpacing="0"> 
       <StackLayout> 
        <ActivityIndicator IsRunning="true" 
             Margin="10" 
             HorizontalOptions="Center" 
             VerticalOptions="Center" /> 
        <Label Text="{i18n:Translate Text=loading_contacts}" 
          Margin="20,0,20,10" 
          HorizontalOptions="Center" 
          VerticalOptions="Center"/> 
       </StackLayout>  
      </Grid> 
     </Frame> 
    </Grid> 
</Grid> 
+0

감사처럼 모든 페이지에서 사용할 수있는 스타일이

<ControlTemplate x:Key="ActivityIndicatorTemplate"> <Grid> <ContentPresenter /> <StackLayout Style="{StaticResource BlockingPanel}" IsVisible="{TemplateBinding BindingContext.IsBusy}"> <ActivityIndicator Style="{StaticResource ActivityIndicatorStyle}" IsVisible="{TemplateBinding BindingContext.IsBusy}" IsRunning="{TemplateBinding BindingContext.IsBusy}" /> </StackLayout> </Grid> </ControlTemplate> 

App.xaml

에서 컨트롤 템플릿을 만들었습니다. 나는 당신의 아이디어가 효과가있을 것이라고 확신하지만, 그 요점을 놓치고 있습니다. 내가하고 싶은 모든 페이지에서 커서를 변경하기 만하면됩니다. 저는 시각적 인 나무를 가지고 놀고 싶지 않습니다. –

0

광산은 좀 더 재사용으로, 데니스 비슷한 답변입니다.

나는 여기

<Style x:Key="BlockingPanel" TargetType="StackLayout"> 
     <Setter Property="BackgroundColor" Value="{StaticResource BlockingColor}" /> 
     <Setter Property="HorizontalOptions" Value="FillAndExpand" /> 
     <Setter Property="VerticalOptions" Value="FillAndExpand" /> 
    </Style> 

    <Style x:Key="ActivityIndicatorStyle" TargetType="ActivityIndicator"> 
     <Setter Property="Color" Value="White" /> 
     <Setter Property="HorizontalOptions" Value="CenterAndExpand" /> 
     <Setter Property="VerticalOptions" Value="CenterAndExpand" /> 
    </Style> 

    <Color x:Key="BlockingColor"> 
     <x:Arguments> 
      <x:Double>0</x:Double> 
      <x:Double>0</x:Double> 
      <x:Double>0</x:Double> 
      <x:Double>0.75</x:Double> 
     </x:Arguments> 
    </Color> 

그런 다음이

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="Incident.Pages.LoginPage" 
      ControlTemplate="{StaticResource ActivityIndicatorTemplate}" 
      Title="Login"> 

... 

</ContentPage> 
+0

감사합니다. 다시 말하지만,이 작업은 가능하지만 비주얼 트리에 대해 아무것도 모르는 방법을 쓰고 있습니다. 커서를 바꿀 무언가가 정말 필요합니다. –

+0

그런 경우 Window.Current.CoreWindow.PointerCursor = new Windows.UI.Core.CoreCursor (Windows.UI.Core.CoreCursorType.Arrow, 0)와 같은 UWP 플랫폼 프로젝트에서 UWP 관련 코드를 작성하십시오. 의존성 서비스를 사용하여 공유 프로젝트에서 호출하십시오. –

+0

나는 이것을 피하기를 바랬습니다. 나는 Xamarin이 이것을하기 위해 도서관을 만들었 으면 좋겠다. –

관련 문제