Windows phone 7 自定义滑块wp7

Windows phone 7 自定义滑块wp7,windows-phone-7,styles,custom-controls,slider,Windows Phone 7,Styles,Custom Controls,Slider,我想创建一个滑块,看起来像此图像上的最后两个: 但我希望顶部显示的值是线性变化的,10100100010000。 我想让用户定义这些值 当我创建带有硬编码值的样式时,一切正常: <Grid x:Name="HorizontalTemplate" Margin="{StaticResource PhoneHorizontalMargin}"> <Grid.Col

我想创建一个滑块,看起来像此图像上的最后两个: 但我希望顶部显示的值是线性变化的,10100100010000。 我想让用户定义这些值

当我创建带有硬编码值的样式时,一切正常:

                            <Grid x:Name="HorizontalTemplate" Margin="{StaticResource PhoneHorizontalMargin}">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="12"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="100m" Grid.Column="0" TextAlignment="Left"></TextBlock>
                                <TextBlock Text="500m" Grid.Column="1" TextAlignment="Center"></TextBlock>
                                <TextBlock Text="1km"  Grid.Column="2" TextAlignment="Center"></TextBlock>
                                <TextBlock Text="10km"  Grid.Column="3" TextAlignment="Center"></TextBlock>
                                <TextBlock Text="100km" Grid.Column="4" TextAlignment="Center"></TextBlock>
                                <TextBlock Text="All" Grid.Column="5" TextAlignment="Center" ></TextBlock>                                
                            </Grid>
                            <Rectangle x:Name="HorizontalFill" Fill="{TemplateBinding Foreground}" Height="12"  IsHitTestVisible="False" Grid.Row="1"/>
                            <Rectangle x:Name="HorizontalTrack" Grid.Column="2" Fill="{TemplateBinding Background}" Height="12" IsHitTestVisible="False" Opacity="0.2" Grid.Row="1"/>
                            <RepeatButton x:Name="HorizontalTrackLargeChangeDecreaseRepeatButton" IsTabStop="False" Template="{StaticResource PhoneSimpleRepeatButton}" Grid.Row="1"/>
                            <RepeatButton x:Name="HorizontalTrackLargeChangeIncreaseRepeatButton" Grid.Column="2" IsTabStop="False" Template="{StaticResource PhoneSimpleRepeatButton}" Grid.Row="1"/>
                            <Thumb x:Name="HorizontalThumb" Grid.Column="1" Height="12"  Width="12" Grid.Row="1">
                                    <Thumb.Template>
                                        <ControlTemplate>
                                            <Canvas Background="{StaticResource PhoneForegroundBrush}" Height="12" Width="12">
                                                <Rectangle Fill="Transparent" Height="84" IsHitTestVisible="True" Canvas.Left="-24" Canvas.Top="-22" Width="60"/>
                                            </Canvas>
                                        </ControlTemplate>
                                    </Thumb.Template>
                                </Thumb>
                            </Grid>

但是,我将定义柱的网格更改为:

<Grid Name="separatorsGrid" DataContext="{Binding GridSeparator}" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"/>

并向其添加了依赖项属性:

     public static readonly DependencyProperty SeparatorProperty =
        DependencyProperty.Register("Separators", typeof(List<string>), typeof(CustomSlider), null);

      public static readonly DependencyProperty GridSeparatorProperty =
        DependencyProperty.Register("GridSeparator", typeof(Grid), typeof(CustomSlider), null);

    public CustomSlider()
    {
        DefaultStyleKey = typeof(CustomSlider);
    }

    public List<string> Separators
    {
        get{ return base.GetValue(SeparatorProperty) as List<string>; }
        set 
        {
            Grid maingrid = new Grid();
            foreach (string separator in value)
            {
                ColumnDefinition col = new ColumnDefinition();
                maingrid.ColumnDefinitions.Add(col);                    
            }

            int colNum = -1;
            foreach (string gridColumn in value)
            {
                colNum++;
                TextBlock textBlock = new TextBlock();
                textBlock.Text = gridColumn;
                Grid.SetRow(textBlock, 0);
                Grid.SetColumn(textBlock, colNum);
                maingrid.Children.Add(textBlock);  // This line makes all the difference.
            }
            base.SetValue(GridSeparatorProperty, maingrid); 
        }
    }

    public Grid GridSeparator
    {
        get { return base.GetValue(GridSeparatorProperty) as Grid; }
        set { base.SetValue(GridSeparatorProperty, value); }
    }
public静态只读从属属性SeparatorProperty=
DependencyProperty.Register(“分隔符”、typeof(列表)、typeof(自定义滑块)、null);
公共静态只读从属属性GridSeparator属性=
DependencyProperty.Register(“GridSeparator”、typeof(Grid)、typeof(CustomSlider)、null;
公共自定义滑块()
{
DefaultStyleKey=typeof(自定义滑块);
}
公共列表分隔符
{
获取{return base.GetValue(SeparatorProperty)作为列表;}
设置
{
网格主网格=新网格();
foreach(值中的字符串分隔符)
{
ColumnDefinition col=新ColumnDefinition();
maingrid.ColumnDefinitions.Add(col);
}
int colNum=-1;
foreach(值中的字符串gridColumn)
{
colNum++;
TextBlock TextBlock=新的TextBlock();
Text=gridColumn;
Grid.SetRow(textBlock,0);
Grid.SetColumn(textBlock,colNum);
maingrid.Children.Add(textBlock);//这一行完全不同。
}
base.SetValue(GridSeparator属性,主栅格);
}
}
公共网格分离器
{
获取{return base.GetValue(GridSeparatorProperty)作为网格;}
set{base.SetValue(GridSeparatorProperty,value);}
}
由于某些原因,这不起作用,依赖项属性甚至不会被调用一次。o、 o或者如果有人对此有类似的解决方案,那就太好了


提前感谢

首先,您永远不应该将代码放在
dependencProperty
getter和setter中。不能保证执行此代码-在某些情况下,依赖项属性会发生直接操作

此外,当您有绑定时,源必须是
公共属性


最后,如何使用
grid
DataContext
将元素和列添加到网格?

首先,决不能将代码放入
dependencProperty
getter和setter中。不能保证执行此代码-在某些情况下,依赖项属性会发生直接操作

此外,当您有绑定时,源必须是
公共属性


最后,如何使用
网格
数据上下文
向网格添加元素和列?

网格
中设置
分隔符
<代码>您不需要,在分隔符中设置分配给网格的Gridseparator属性。请提供一些测试项目来测试它,然后执行:。明天我将写下您在
网格中设置
分隔符的问题的位置<代码>您不需要,在分隔符中设置分配给网格的Gridseparator属性。请提供一些测试项目来测试它,然后执行:。明天我将写下问题“最后,你打算如何使用网格的DataContext向网格中添加元素和列?”这也是我要问的。但我看到你做到了:目前我不知道如何添加元素和列,但我将对此进行回顾。非常感谢你!看我的项目。我用GetTemplateChild来做这个。是的,你需要检查一下并清理一些有问题的东西;)“最后,你打算如何使用网格的DataContext向网格添加元素和列?”这也是我要问的。但我看到你做到了:D目前我不知道如何添加元素和列,但我会回顾一下。非常感谢你!看我的项目。我用GetTemplateChild来做这个。是的,你需要检查一下并清理一些有问题的东西;)