2016-08-22 31 views
1

如何在Windows UWP中爲分段控制創建自定義的渲染器。我跟着這個link自定義渲染在IOS和Android的分段控制。但我找不到任何Windows UWP。任何人都可以提供任何資源,或者是否有任何其他方式做到這一點,類似於Windows UWP中的分段控制。Xamarin:用於Windows的分段控制uwp

enter image description here

回答

2

我最近發現了nuget包FreshEssentials。它具有分段按鈕組的實現。按照這個github link找到實現。它很容易使用。

+0

Asesome @Himanshu(y)! –

+0

還有這個:(https://github.com/1iveowl/Plugin.SegmentedControl –

1

我自定義風格的單選按鈕做了一次。爲您的按鈕編輯RadioButton樣式 - 創建正在查看的已選中和未選中樣式,併爲其分配相同的組,以便當時只能選擇一個按鈕。 不知道有沒有更簡單的方法。

編輯:SAMPE代碼,編輯您想要的方式:我找到了解決自己

<Page.Resources> 
    <Style x:Key="RadioButtonStyle1" TargetType="RadioButton"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Foreground" Value="{ThemeResource RadioButtonContentForegroundThemeBrush}"/> 
     <Setter Property="Padding" Value="0,0,0,0"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="VerticalAlignment" Value="Stretch"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> 
     <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="RadioButton"> 
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="PointerOver"> 

           </VisualState> 
           <VisualState x:Name="Pressed"> 

           </VisualState> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BackgroundRectangle"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RadioButtonDisabledBackgroundThemeBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RadioButtonContentDisabledForegroundThemeBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="CheckStates"> 
           <VisualState x:Name="Checked"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BackgroundRectangle"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Blue"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="White"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Unchecked"> 

           </VisualState> 
           <VisualState x:Name="Indeterminate"/> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Focused"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualWhite"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualBlack"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Unfocused"/> 
           <VisualState x:Name="PointerFocused"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 


         <Grid HorizontalAlignment="Stretch"> 
          <Grid x:Name="BackgroundRectangle" Background="Transparent"> 
           <Border BorderThickness="1" BorderBrush="White" Margin="0" HorizontalAlignment="Stretch"> 
            <Rectangle Margin="0" StrokeThickness="{ThemeResource RadioButtonBorderThemeThickness}" HorizontalAlignment="Stretch" UseLayoutRounding="False"/> 
           </Border> 
           <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="Title"></TextBlock> 

          </Grid> 
          <ContentPresenter x:Name="ContentPresenter" Foreground="White" AutomationProperties.AccessibilityView="Raw" 
              ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" 
              Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 


<Grid Height="40" Background="Black" BorderThickness="0"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="10"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="10"/> 
    </Grid.ColumnDefinitions> 

    <RadioButton Height="30" Content="Button1" Grid.Column="1" Style="{StaticResource RadioButtonStyle1}" GroupName="MainGroup" Checked="Button1_OnChecked"></RadioButton> 
    <RadioButton Height="30" Content="Button2" Grid.Column="2" Style="{StaticResource RadioButtonStyle1}" GroupName="MainGroup" Checked="Button2_OnChecked"></RadioButton> 
    <RadioButton Height="30" Content="Button3" Grid.Column="3" Style="{StaticResource RadioButtonStyle1}" GroupName="MainGroup" Checked="Button3_OnChecked"></RadioButton> 
    <RadioButton Height="30" Content="Button4" Grid.Column="4" Style="{StaticResource RadioButtonStyle1}" GroupName="MainGroup" Checked="Button4_OnChecked"></RadioButton> 
</Grid> 
+0

能否請您對UWP定製提供一些代碼。是的,它可以用單選按鈕來完成,但不確定在這種情況下uwp中使用的佈局模板。 –

+0

在樣式開始的行下添加了樣本代碼 – RTDev

+0

的編輯,您可以看到一些行 - rg。 設置填充0,然後您可以使用此值與任何控制定義在使用Padding =「{TemplateBinding Padding}」的樣式,關於ThemeResource您可以在這裏閱讀:https ://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/themeresource-markup-extension,但你會propably只需要ThemeResource採用的信息使用默認的系統風格 - 所以你可以改變(而且應該)每個值=「{ThemeResource ...}」值=「紅色」或任何其他你想要的值 – RTDev