2012-03-21 4 views
1

Я пытаюсь сделать слайдер диапазона для приложения стиля метро, ​​потому что он недоступен. Я пытаюсь использовать существующий слайдер диапазона Silverlight, но все будет хорошо. Я немного изменил код, но теперь он просто показывает слайдер, и я не могу переместить большие пальцы.Диапазон слайдера стиль метро приложение

Вот код XAML:

<UserControl x:Class="Mecoms_Mobile_App.RangeSlider" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
<Grid x:Name="LayoutRoot" Background="White" VerticalAlignment="Top"> 

    <Grid.Resources> 
     <ControlTemplate x:Key="buttonTemplate" TargetType="RepeatButton"> 
      <!-- just empty--> 
      <Grid /> 
     </ControlTemplate> 
     <ControlTemplate x:Key="sliderTemplate" TargetType="Slider"> 
      <Grid x:Name="HorizontalTemplate" Background="{TemplateBinding Background}"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <RepeatButton Template="{StaticResource buttonTemplate}" IsTabStop="False" IsEnabled="False" x:Name="HorizontalTrackLargeChangeDecreaseRepeatButton" Grid.Column="0"/> 
       <Thumb IsTabStop="True" Height="18" x:Name="HorizontalThumb" Width="11" Grid.Column="1"> 
        <Thumb.Template> 
         <ControlTemplate TargetType="Thumb"> 
          <Rectangle Fill="Red" 
             Stroke="Black" 
             StrokeThickness="1" /> 
         </ControlTemplate> 
        </Thumb.Template> 
       </Thumb> 
       <RepeatButton Template="{StaticResource buttonTemplate}" IsTabStop="False" IsEnabled="False" x:Name="HorizontalTrackLargeChangeIncreaseRepeatButton" Grid.Column="2"/> 
      </Grid> 
     </ControlTemplate> 

    </Grid.Resources> 

    <Border BorderThickness="0,1,0,0" BorderBrush="Black" VerticalAlignment="Center" Height="1" 
      Margin="5,0,5,0"/> 

    <Slider x:Name="LowerSlider" 
      Minimum="{Binding Minimum}" 
      Maximum="{Binding Maximum}" 
      Value="{Binding LowerValue, Mode=TwoWay}" 
      Margin="0,0,10,0" 
      Template="{StaticResource sliderTemplate}" 
      /> 

    <Slider x:Name="UpperSlider" 
      Minimum="{Binding Minimum}" 
      Maximum="{Binding Maximum}" 
      Value="{Binding UpperValue, Mode=TwoWay}" 
      Margin="10,0,0,0" 
      Template="{StaticResource sliderTemplate}" 
      /> 
</Grid> 
</UserControl> 

код позади него:

public sealed partial class RangeSlider : UserControl 
{ 
    public RangeSlider() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(RangeSlider_Loaded); 

     LayoutRoot.DataContext = this; 
    } 

    void RangeSlider_Loaded(object sender, RoutedEventArgs e) 
    { 
     LowerSlider.ValueChanged += LowerSlider_ValueChanged; 
     UpperSlider.ValueChanged += UpperSlider_ValueChanged; 
    } 

    void UpperSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
    { 
     LowerSlider.Value = Math.Min(UpperSlider.Value, LowerSlider.Value); 
    } 

    void LowerSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
    { 
     UpperSlider.Value = Math.Max(UpperSlider.Value, LowerSlider.Value); 
    } 

    public double Minimum 
    { 
     get { return (double)GetValue(MinimumProperty); } 
     set { SetValue(MinimumProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Minimum. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty MinimumProperty = 
     DependencyProperty.Register("Minimum", typeof(double), typeof(RangeSlider), new PropertyMetadata(0d)); 

    public double Maximum 
    { 
     get { return (double)GetValue(MaximumProperty); } 
     set { SetValue(MaximumProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Maximum. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty MaximumProperty = 
     DependencyProperty.Register("Maximum", typeof(double), typeof(RangeSlider), new PropertyMetadata(1d)); 

    public double LowerValue 
    { 
     get { return (double)GetValue(LowerValueProperty); } 
     set { SetValue(LowerValueProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for LowerValue. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty LowerValueProperty = 
     DependencyProperty.Register("LowerValue", typeof(double), typeof(RangeSlider), new PropertyMetadata(0d)); 

    public double UpperValue 
    { 
     get { return (double)GetValue(UpperValueProperty); } 
     set { SetValue(UpperValueProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for UpperValue. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty UpperValueProperty = 
     DependencyProperty.Register("UpperValue", typeof(double), typeof(RangeSlider), new PropertyMetadata(0d)); 
} 

Есть ли что-то не так с этим кодом? Или есть другой способ добиться этого?

+0

Возможно, вам следует быть более конкретным и добавить картинку, это прояснит ситуацию! – Letoir

+0

Вот ссылка на скриншот слайдера диапазона: http://gyazo.com/08a5760cafd2a91fbe94be93f048b33d.png?1332749326 – Jay

+0

Никто не знает? Или предложение для другого решения? – Jay

ответ

1

Лучше поздно, чем никогда, но я пытался заставить тот же код работать. Add

<Rectangle x:Name="HorizontalDecreaseRect" Grid.Row="1"/> 

перед элементом Thumb в ControlTemplate. Это позволит движению большого пальца двигаться.

+0

Это было решение, у меня была такая же проблема, попробовал код выше и основал ошибку, при этом этот прямоугольник работает как шарм, но не могли бы вы объяснить, почему? Я не понимаю, что изменил Rectangle: D – piggy