Silverlight 4/5 DataPager模板PageSize ComboBox

时间:2012-08-18 20:53:54

标签: c# silverlight silverlight-5.0 datapager

我为Silverlight DataPager控件定义了一个模板,其中的CombboBox具有PageSize值

模板:

<Style TargetType="sdk:DataPager">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="sdk:DataPager">
                <Grid x:Name="Root" Background="Transparent">
                    <Border BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" MinHeight="24" Padding="{TemplateBinding Padding}"             VerticalAlignment="Bottom">
                        <StackPanel HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Orientation="Horizontal" VerticalAlignment="Stretch">
                            <Button x:Name="FirstPageButton" BorderBrush="{StaticResource BorderBrushColor}" BorderThickness="1" Background="{StaticResource BackgroundColor}" Foreground="{StaticResource ForegroundColor}" HorizontalAlignment="Right" Height="20" Padding="1" Template="{StaticResource ButtonTemplate}" VerticalAlignment="Center" Width="20" Margin="0,0,3,0">
                                <Grid Height="9" Width="8">
                                    <Path Data="M0,1 L1,0 L1,2 Z" HorizontalAlignment="Right" Height="9" Stretch="Fill" Width="5" Fill="White"/>
                                    <Rectangle HorizontalAlignment="Left" Width="2" Fill="White"/>
                                </Grid>
                            </Button>
                            <Button x:Name="PreviousPageButton" BorderBrush="{StaticResource BorderBrushColor}" BorderThickness="1" Background="{StaticResource BackgroundColor}" Foreground="{StaticResource ForegroundColor}" HorizontalAlignment="Right" Height="20" Padding="1" Template="{StaticResource ButtonTemplate}" VerticalAlignment="Center" Width="20" Margin="0,0,3,0">
                                <Path Data="M0,1 L1,0 L1,2 Z" HorizontalAlignment="Center" Height="9" Stretch="Fill" Width="5" Fill="White"/>
                            </Button>
                            <Border x:Name="Separator1" BorderThickness="1,0,1,0" Margin="0, 3" Width="1" BorderBrush="#FF747474"/>
                            <StackPanel x:Name="NumericButtonPanel" Margin="1" Orientation="Horizontal"/>
                            <StackPanel x:Name="PageSizeDisplay" Orientation="Horizontal">


                                <ComboBox SelectedValue="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=PageSize, Mode=TwoWay}" 
                                          SelectedValuePath="Content" Width="60" Margin="3"
                                          BorderBrush="{TemplateBinding BorderBrush}" Foreground="{TemplateBinding Foreground}">
                                    <ComboBoxItem Content="10"></ComboBoxItem>
                                    <ComboBoxItem Content="20" IsSelected="True"></ComboBoxItem>
                                    <ComboBoxItem Content="50"></ComboBoxItem>
                                    <ComboBoxItem Content="100"></ComboBoxItem>
                                    <ComboBoxItem Content="200"></ComboBoxItem>
                                </ComboBox>


                            </StackPanel>
                            <StackPanel x:Name="PageDisplay" Orientation="Horizontal">
                                <TextBlock x:Name="CurrentPagePrefixTextBlock" Foreground="{TemplateBinding Foreground}" Margin="4,0,0,0" VerticalAlignment="Center" Width="Auto"/>
                                <TextBox x:Name="CurrentPageTextBox" BorderBrush="{TemplateBinding BorderBrush}" Foreground="{TemplateBinding Foreground}" Height="Auto" Margin="4,2,4,2" Style="{StaticResource TextBoxStyle1}" TextWrapping="Wrap" VerticalAlignment="Center" Width="40"/>
                                <TextBlock x:Name="CurrentPageSuffixTextBlock" Foreground="{TemplateBinding Foreground}" Margin="0,0,4,0" VerticalAlignment="Center" Width="Auto"/>
                            </StackPanel>
                            <Border x:Name="Separator2" BorderThickness="1,0,1,0" Margin="0,3" Width="1" BorderBrush="#FF747474"/>
                            <Button x:Name="NextPageButton" BorderBrush="{StaticResource BorderBrushColor}" BorderThickness="1" Background="{StaticResource BackgroundColor}" Foreground="{StaticResource ForegroundColor}" HorizontalAlignment="Right" Height="20" Padding="1" Template="{StaticResource ButtonTemplate}" VerticalAlignment="Center" Width="20" Margin="3,0">
                                <Path Data="M0,0 L1,1 L0,2 Z" HorizontalAlignment="Center" Height="9" Stretch="Fill" Width="5" Fill="White"/>
                            </Button>
                            <Button x:Name="LastPageButton" BorderBrush="{StaticResource BorderBrushColor}" BorderThickness="1" Background="{StaticResource BackgroundColor}" Foreground="{StaticResource ForegroundColor}" HorizontalAlignment="Right" Height="20" Padding="1" Template="{StaticResource ButtonTemplate}" VerticalAlignment="Center" Width="20">
                                <Grid Height="9" Width="8">
                                    <Path Data="M0,0 L1,1 L0,2 Z" HorizontalAlignment="Left" Height="9" Stretch="Fill" Width="5" Fill="White"/>
                                    <Rectangle HorizontalAlignment="Right" Width="2" Fill="White"/>
                                </Grid>
                            </Button>
                        </StackPanel>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

用法:

<sdk:DataPager x:Name="pager" Source="{Binding Path=ItemsSource, ElementName=myGrid}" PageSize="50" />

我的DataGrid绑定到PagedCollectionView,但PageSize ComboBox仍未显示正确的值。 (如果未设置IsSelected属性,则ComboBox

中没有选定项

我也尝试设置PageSize的{​​{1}}属性,这也无济于事。

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您正尝试将ComboBoxItem值与int32值绑定。

试试这个:

<ComboBox SelectedValue="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=PageSize, Mode=TwoWay}" 
Width="60" Margin="3"
BorderBrush="{TemplateBinding BorderBrush}" Foreground="{TemplateBinding Foreground}">

<sys:Int32>10</sys:Int32>
<sys:Int32>20</sys:Int32>
<sys:Int32>50</sys:Int32>

还添加以下命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"