2013-08-18 36 views
1

當我設置IsSelectionEnabled = true時,這就是我的LongListMultiSelector在WP8應用程序上的外觀。LongListMultiSelector:我如何從左到右更改複選框的位置?

默認情況下,複選框顯示在左側。我如何改變它以顯示在右側?

enter image description here

XAML代碼:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <!--TitlePanel contains the name of the application and page title--> 
     <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
      <TextBlock Text="GHATIKA" Style="{StaticResource PhoneTextNormalStyle}"/> 
      <TextBlock Text="cities" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
     </StackPanel> 

     <!--ContentPanel - place additional content here--> 
     <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 


      <toolkit:LongListMultiSelector x:Name="AddrBook" 
             JumpListStyle="{StaticResource AddrBookJumpListStyle}" 
             Background="Transparent" 
             GroupHeaderTemplate="{StaticResource AddrBookGroupHeaderTemplate}" 
             ItemTemplate="{StaticResource AddrBookItemTemplate}" 
             LayoutMode="List" 
             IsGroupingEnabled="true" 
             HideEmptyGroups ="true"/> 
     </Grid> 
    </Grid> 

<DataTemplate x:Key="AddrBookItemTemplate"> 
    <StackPanel VerticalAlignment="Top"> 
     <TextBlock FontWeight="Bold" Text="{Binding FirstName}" /> 
     <TextBlock Text="{Binding LastName}" /> 
     <TextBlock Text="{Binding Address}" /> 
     <TextBlock Text="{Binding Phone}" /> 
    </StackPanel> 
</DataTemplate> 

<DataTemplate x:Key="AddrBookGroupHeaderTemplate"> 
    <Border Background="Transparent" Margin="12,8,0,8"> 
     <Border Background="{StaticResource PhoneAccentBrush}" 
           Padding="8,0,0,0" Width="62" Height="62"     
           HorizontalAlignment="Left"> 
      <TextBlock Text="{Binding Key}" Foreground="{StaticResource PhoneForegroundBrush}" FontSize="48" Padding="6" 
    FontFamily="{StaticResource PhoneFontFamilySemiLight}" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
     </Border> 
    </Border> 
</DataTemplate> 


<phone:JumpListItemBackgroundConverter x:Key="BackgroundConverter"/> 
<phone:JumpListItemForegroundConverter x:Key="ForegroundConverter"/> 
<Style x:Key="AddrBookJumpListStyle" TargetType="phone:LongListSelector"> 
    <Setter Property="GridCellSize" Value="113,113"/> 
    <Setter Property="LayoutMode" Value="Grid" /> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Border Background="{Binding Converter={StaticResource BackgroundConverter}}" Width="Auto" Height="Auto" Margin="6" > 
        <TextBlock Text="{Binding Key}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" FontSize="48" Padding="6" 
           Margin="8,0,0,0" Foreground="{Binding Converter={StaticResource ForegroundConverter}}" VerticalAlignment="Bottom"/> 
       </Border> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

+0

你嘗試過編輯的塔模板控制? –

+0

如何做到這一點?你可以發佈參考XAML代碼嗎?我是WP開發新手。 – NoobDeveloper

+0

你可以發佈代碼你有haam採取xaml pls? –

回答

3

所以壞消息是,手機工具包開發團隊已決定風格的LongListMultiSelectorItem一個INTERNAL財產只有這樣,它一直看起來像你在郵件應用程序中找到它的方式。這意味着你不能用預先構建的DLL覆蓋樣式...

好消息是它是開源的。所以你可以去改變它,不利的一面是,你將不得不在你的源代碼中保留整個工具包的副本,如果你想用該工具包的更新副本進行更新,你將不得不手動合併它。我們隨時可以向他們提出變更請求,看看他們是否願意爲我們改變這一點,但與此同時,如果您仍想這樣做,您將不得不嘗試以下方法之一:

如果你想讓所有你的LongListMultiSelector的實例擁有右對齊的複選框,那麼你所需要做的就是編輯Themes/Generic.xaml文件中名爲「LongListMultiSelectorItemListStyle」的樣式(最好使用混合,因爲你可以更容易地移動東西並看到控制的視覺狀態 - 但我注意到,當我自己嘗試這種混合將重命名視覺狀態,並在前面添加1,您將要刪除這些,並意識到動態之間的狀態改變)。

如果你想更好的解決辦法,讓你創建自己的模板控制的只是一個單一的情況下,我建議剛要去LongListMultiSelector和改變DefaultListItemContainerStyleProperty和DefaultGridItemContainerStyleProperty(加上他們支持字段)的公共然後你可以在你的代碼中做如下的事情(這只是從左到右的風格的反轉,它可能不適合你想要的東西,因爲當複選框飛出時,內容也向右移動):

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
xmlns:primitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assembly=Microsoft.Phone.Controls.Toolkit"> 
<!-- Resource dictionary entries should be defined here. --> 
<Style TargetType="controls:LongListMultiSelector"> 
    <Setter Property="DefaultListItemContainerStyle" Value="{StaticResource RightLongListMultiSelectorItemListStyle}"/> 
</Style> 

<Style x:Key="RightLongListMultiSelectorItemListStyle" TargetType="controls:LongListMultiSelectorItem"> 
    <Style.Setters> 
     <Setter Property="Background" Value="{StaticResource PhoneAccentBrush}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="controls:LongListMultiSelectorItem"> 
        <Grid MinHeight="52"> 
         <Grid.Resources> 
          <ExponentialEase EasingMode="EaseIn" Exponent="8" x:Key="ExponentialEaseIn"/> 
          <QuadraticEase EasingMode="EaseOut" x:Key="QuadraticEaseOut"/> 
         </Grid.Resources> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="SelectionEnabledStates"> 
           <VisualStateGroup.Transitions> 
            <VisualTransition x:Name="ClosedToExposed" 
             From="Closed" To="Exposed" 
             GeneratedDuration="0:0:0.30"> 
             <Storyboard> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
               Storyboard.TargetName="OuterHintPanel"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.30" Value="1.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
              </DoubleAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
            <VisualTransition x:Name="ExposedToClosed" 
             From="Exposed" To="Closed" 
             GeneratedDuration="0:0:0.30"> 
             <Storyboard> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
               Storyboard.TargetName="OuterHintPanel"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="1.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.30" Value="0.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
              </DoubleAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
            <VisualTransition x:Name="ExposedToOpened" 
             From="Exposed" To="Opened" 
             GeneratedDuration="0:0:0.30"> 
             <Storyboard> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="SelectBox"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="58" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="0" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="Presenter"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="-24" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="-86" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
               Storyboard.TargetName="OuterHintPanel"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="1.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.30" Value="0.0" EasingFunction="{StaticResource QuadraticEaseOut}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
               Storyboard.TargetName="SelectBox"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="Visible"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
               Storyboard.TargetName="OuterHintPanel"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
               Storyboard.TargetName="InnerHintPanel"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
            <VisualTransition x:Name="ClosedToOpened" 
             From="Closed" To="Opened" 
             GeneratedDuration="0:0:0.15"> 
             <Storyboard> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="SelectBox"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="-68" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="Presenter"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="-24" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="-86" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
               Storyboard.TargetName="SelectBox"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="Visible"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
               Storyboard.TargetName="OuterHintPanel"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
               Storyboard.TargetName="InnerHintPanel"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
            <VisualTransition x:Name="OpenedToClosed" 
             From="Opened" To="Closed" 
             GeneratedDuration="0:0:0.15"> 
             <Storyboard> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="SelectBox"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="-68" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="0" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
               Storyboard.TargetName="Presenter"> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="-86" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
               <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="-24" EasingFunction="{StaticResource ExponentialEaseIn}"/> 
              </DoubleAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
               Storyboard.TargetName="SelectBox"> 
               <DiscreteObjectKeyFrame KeyTime="0:0:0.15" Value="Collapsed"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualTransition> 
           </VisualStateGroup.Transitions> 
           <VisualStateGroup.States> 
            <VisualState x:Name="Closed"/> 
            <VisualState x:Name="Exposed"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)" 
              Storyboard.TargetName="OuterHintPanel" 
              Duration="0" To="1.0"/> 
            </Storyboard> 
           </VisualState> 
            <VisualState x:Name="Opened"> 
            <Storyboard> 
             <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
              Storyboard.TargetName="SelectBox" 
              Duration="0" To="-68"/> 
             <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" 
              Storyboard.TargetName="Presenter" 
              Duration="0" To="-86"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
              Storyboard.TargetName="SelectBox"> 
              <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
              Storyboard.TargetName="OuterCover"> 
              <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/> 
             </ObjectAnimationUsingKeyFrames> 
             <DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)" 
              Storyboard.TargetName="OuterHintPanel" 
              Duration="0" To="0.0"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
              Storyboard.TargetName="OuterHintPanel"> 
              <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" 
              Storyboard.TargetName="InnerHintPanel"> 
              <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="False"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           </VisualStateGroup.States> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Grid HorizontalAlignment="Stretch"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <ContentControl x:Name="InfoPresenter" 
           VerticalAlignment="Top" 
           Content="{TemplateBinding ContentInfo}" 
           ContentTemplate="{TemplateBinding ContentInfoTemplate}"/> 
          <Grid Grid.Column="1" HorizontalAlignment="Stretch" primitives:ClipToBounds.IsEnabled="True"> 
           <ContentPresenter x:Name="Presenter"> 
            <ContentPresenter.RenderTransform> 
             <CompositeTransform TranslateX="-24"/> 
            </ContentPresenter.RenderTransform> 
           </ContentPresenter> 
          </Grid> 
          <Rectangle x:Name="InnerHintPanel" Grid.Column="1" Width="24" 
           Height="{TemplateBinding HintPanelHeight}" 
           HorizontalAlignment="Right" 
           Fill="Transparent" 
           StrokeThickness="0"> 
           <Rectangle.RenderTransform> 
            <CompositeTransform TranslateX="-24"/> 
           </Rectangle.RenderTransform> 
          </Rectangle> 
         </Grid> 
         <Rectangle x:Name="OuterHintPanel" Width="24" 
            HorizontalAlignment="Right" 
            Height="{TemplateBinding HintPanelHeight}" 
            Fill="{TemplateBinding Background}" 
            StrokeThickness="0" Opacity="0.0"/> 
         <Grid x:Name="OuterCover" IsHitTestVisible="True" 
           Visibility="Collapsed" Background="Transparent"/> 
         <Canvas HorizontalAlignment="Right"> 
          <CheckBox x:Name="SelectBox" VerticalAlignment="Top" Margin="12,-20,5,0" 
             IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected, Mode=TwoWay}" Visibility="Collapsed"> 
           <CheckBox.RenderTransform> 
            <CompositeTransform TranslateX="0"/> 
           </CheckBox.RenderTransform> 
          </CheckBox> 
         </Canvas> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style.Setters> 
</Style> 

相關問題