2010-11-26 11 views
5

मैं एक डब्ल्यूपीएफ स्लाइडर नियंत्रण का उपयोग कर रहा हूं (मुझे लगता है कि सिल्वरलाइट संस्करण समान है) जो क्षैतिज पर सेट है और इसका न्यूनतम मान 0 है और अधिकतम मूल्य 5 है।डब्ल्यूपीएफ/सिल्वरलाइट स्लाइडर नियंत्रण टिक संख्या

मैं टिक अंकों के नीचे मान 0 - 5 प्रदर्शित करना चाहता हूं ताकि यह थोड़ा और स्पष्ट हो सके कि अंगूठे वर्तमान में इंगित कर रहा है।

क्या यह संभव है और क्या कोई इसे प्राप्त करने में कामयाब रहा है?

+0

क्या आप सिल्वरलाइट में काम करने वाले एक उत्तर चाहते हैं? यह सबसे अच्छा है यदि आप इस बारे में स्पष्ट हैं कि इसे वास्तव में कहां काम करने की आवश्यकता है। – AnthonyWJones

+0

हाय एंथनी, मुझे इसे एक डब्ल्यूपीएफ परियोजना के लिए जरूरी है जिसे अगले वर्ष सिल्वरलाइट में भेज दिया जा रहा है, इसलिए मुझे विशेष रूप से परेशान नहीं किया गया है कि मुझे डब्ल्यूपीएफ या सिल्वरलाइट समाधान मिल रहा है या नहीं। दोनों के बीच समानता को देखते हुए मैं किसी भी सुझाव को किसी भी तरह से अनुकूलित करने में सक्षम होने की उम्मीद करता हूं। मिच – Mitch

उत्तर

11

मुझे विश्वास है कि ऐसा करने का सबसे अच्छा तरीका कस्टम टिकबार नियंत्रण बनाना और टिकों के प्रतिपादन को ओवरराइड करना है।

public class NumberedTickBar : TickBar 
    { 
    protected override void OnRender(DrawingContext dc) 
    { 

     Size size = new Size(base.ActualWidth,base.ActualHeight); 
     int tickCount = (int)((this.Maximum - this.Minimum)/this.TickFrequency) + 1; 
     if((this.Maximum - this.Minimum) % this.TickFrequency == 0) 
     tickCount -= 1; 
     Double tickFrequencySize; 
     // Calculate tick's setting 
     tickFrequencySize = (size.Width * this.TickFrequency/(this.Maximum - this.Minimum)); 
     string text = ""; 
     FormattedText formattedText = null; 
     double num = this.Maximum - this.Minimum; 
     int i = 0; 
     // Draw each tick text 
     for(i = 0;i <= tickCount;i++) 
     { 
     text = Convert.ToString(Convert.ToInt32(this.Minimum + this.TickFrequency * i),10); 

     formattedText = new FormattedText(text,CultureInfo.GetCultureInfo("en-us"),FlowDirection.LeftToRight,new Typeface("Verdana"),8,Brushes.Black); 
     dc.DrawText(formattedText,new Point((tickFrequencySize * i),30)); 

     } 
    } 
    } 

तो फिर तुम डिफ़ॉल्ट tickbar के बजाय अपने नए Tickbar का उपयोग करता है अपने स्लाइडर के लिए एक कस्टम शैली बनाने के लिए होगा: यहाँ एक तरीका है।

यदि आप सुनिश्चित नहीं हैं कि स्लाइडर के लिए शैली कैसे बनाएं, तो आप विंडोज़ उदाहरण here. से शुरू कर सकते हैं यह एक बहुत ही परिष्कृत है।

तब एकमात्र चीज है जो शीर्ष टिकबार को अपने नए कस्टम के साथ प्रतिस्थापित करना है। मूल रूप से बदलने के लिए:

<TickBar Name="TopTick" SnapsToDevicePixels="True" Placement="Top" Fill="{StaticResource GlyphBrush}" Height="4" Visibility="Collapsed" /> 

यह करने के लिए:

<local:NumberedTickBar Name="TopTick" Margin="5,0,10,0" SnapsToDevicePixels="True" Grid.Row="0" Fill="{TemplateBinding Foreground}" Placement="Top" Height="4" Visibility="Collapsed"/> 

मार्जिन महत्वपूर्ण है क्योंकि कि यह सुनिश्चित करेंगे कि अपने पाठ सही जगह में है।

आपका स्लाइडर शीर्ष पर टिकों के साथ शीर्ष पर होगा। टेक्स्ट की एक पंक्ति टिक के नीचे प्रदर्शित की जाएगी।

0

उपर्युक्त उत्तर में थोड़ा और विवरण जोड़ना। इस तरह हमने इसे किया, सबसे पहले डिफ़ॉल्ट स्लाइडर नियंत्रण संपादित करें और मिश्रण में xaml उत्पन्न करें।

यहां कस्टम शैली है और कस्टमटिकबार के बजाय हां क्रमांकित टिकबार को प्रतिस्थापित करें और स्टाइल में उपलब्ध कराए गए क्षैतिज स्लाइडर के रूप में अपने स्लाइडर के लिए टेम्पलेट का उपयोग करें।

<SolidColorBrush 
      x:Key="SliderThumb.Static.Foreground" 
      Color="#FFE5E5E5" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.MouseOver.Background" 
      Color="#FFDCECFC" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.MouseOver.Border" 
      Color="#FF7Eb4EA" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Pressed.Background" 
      Color="#FFDAECFC" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Pressed.Border" 
      Color="#FF569DE5" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Disabled.Background" 
      Color="#FFF0F0F0" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Disabled.Border" 
      Color="#FFD9D9D9" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Static.Background" 
      Color="#FFF0F0F0" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Static.Border" 
      Color="#FFACACAC" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Track.Border" 
      Color="#FFD6D6D6" /> 
     <SolidColorBrush 
      x:Key="SliderThumb.Track.Background" 
      Color="Red" /> 
     <Style 
      x:Key="RepeatButtonTransparent" 
      TargetType="{x:Type RepeatButton}"> 
      <Setter 
       Property="OverridesDefaultStyle" 
       Value="true" /> 
      <Setter 
       Property="Background" 
       Value="Transparent" /> 
      <Setter 
       Property="Focusable" 
       Value="false" /> 
      <Setter 
       Property="IsTabStop" 
       Value="false" /> 
      <Setter 
       Property="Template"> 
       <Setter.Value> 
        <ControlTemplate 
         TargetType="{x:Type RepeatButton}"> 
         <Rectangle 
          Fill="{TemplateBinding Background}" 
          Height="{TemplateBinding Height}" 
          Width="{TemplateBinding Width}" /> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style 
      x:Key="SliderThumbStyle" 
      TargetType="{x:Type Thumb}"> 
      <Setter 
       Property="SnapsToDevicePixels" 
       Value="true" /> 
      <Setter 
       Property="OverridesDefaultStyle" 
       Value="true" /> 
      <Setter 
       Property="Height" 
       Value="18" /> 
      <Setter 
       Property="Width" 
       Value="18" /> 
      <Setter 
       Property="Template"> 
       <Setter.Value> 
        <ControlTemplate 
         TargetType="{x:Type Thumb}"> 
         <Ellipse 
          Name="Ellipse" 
          Fill="Orange" 
          Stroke="#404040" 
          StrokeThickness="1" /> 
         <ControlTemplate.Triggers> 
          <Trigger 
           Property="IsMouseOver" 
           Value="True"> 
           <Setter 
            TargetName="Ellipse" 
            Property="Fill" 
            Value="#FFC3C0FF" /> 

          </Trigger> 
          <Trigger 
           Property="IsEnabled" 
           Value="false"> 
           <Setter 
            TargetName="Ellipse" 
            Property="Fill" 
            Value="#EEEEEE" /> 

          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <ControlTemplate 
      x:Key="SliderThumbHorizontalDefault" 
      TargetType="{x:Type Thumb}"> 
      <Grid 
       HorizontalAlignment="Center" 
       UseLayoutRounding="True" 
       VerticalAlignment="Center"> 
       <Path 
        x:Name="grip" 
        Data="M 0,0 C0,0 11,0 11,0 11,0 11,18 11,18 11,18 0,18 0,18 0,18 0,0 0,0 z" 
        Fill="{StaticResource SliderThumb.Static.Background}" 
        Stretch="Fill" 
        SnapsToDevicePixels="True" 
        Stroke="{StaticResource SliderThumb.Static.Border}" 
        StrokeThickness="1" 
        UseLayoutRounding="True" 
        VerticalAlignment="Center" /> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger 
        Property="IsMouseOver" 
        Value="true"> 
        <Setter 
         Property="Fill" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.MouseOver.Background}" /> 
        <Setter 
         Property="Stroke" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.MouseOver.Border}" /> 
       </Trigger> 
       <Trigger 
        Property="IsDragging" 
        Value="true"> 
        <Setter 
         Property="Fill" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.Pressed.Background}" /> 
        <Setter 
         Property="Stroke" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.Pressed.Border}" /> 
       </Trigger> 
       <Trigger 
        Property="IsEnabled" 
        Value="false"> 
        <Setter 
         Property="Fill" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.Disabled.Background}" /> 
        <Setter 
         Property="Stroke" 
         TargetName="grip" 
         Value="{StaticResource SliderThumb.Disabled.Border}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     <ControlTemplate 
      x:Key="HorizontalSlider" 
      TargetType="{x:Type Slider}"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition 
         Height="Auto" /> 
        <RowDefinition 
         Height="Auto" 
         MinHeight="{TemplateBinding Slider.MinHeight}" /> 
        <RowDefinition 
         Height="Auto" /> 
       </Grid.RowDefinitions> 
       <Custom:CustomTickBar 
        Margin="5,0,10,0" 
        x:Name="TopTick" 
        SnapsToDevicePixels="True" 
        Placement="Top" 
        Fill="Green" 
        Height="5" /> 
       <Border 
        Name="TrackBackground" 
        Margin="0" 
        CornerRadius="2" 
        Height="4" 
        Grid.Row="1" 
        Background="{StaticResource SliderThumb.Track.Background}" 
        BorderBrush="{StaticResource SliderThumb.Track.Border}" 
        BorderThickness="1" /> 
       <Track 
        Grid.Row="1" 
        Name="PART_Track"> 
        <Track.DecreaseRepeatButton> 
         <RepeatButton 
          Style="{StaticResource RepeatButtonTransparent}" 
          Command="Slider.DecreaseLarge" /> 
        </Track.DecreaseRepeatButton> 
        <Track.Thumb> 
         <Thumb 
          Style="{StaticResource SliderThumbStyle}" /> 
         <!--<Thumb 
          Style="{StaticResource SliderThumbHorizontalDefault}" />--> 
        </Track.Thumb> 
        <Track.IncreaseRepeatButton> 
         <RepeatButton 
          Style="{StaticResource RepeatButtonTransparent}" 
          Command="Slider.IncreaseLarge" /> 
        </Track.IncreaseRepeatButton> 
       </Track> 
       <TickBar 
        Name="BottomTick" 
        SnapsToDevicePixels="True" 
        Grid.Row="2" 
        Fill="Black" 
        Placement="Bottom" 
        Height="10" 
        Visibility="Collapsed" /> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger 
        Property="TickPlacement" 
        Value="TopLeft"> 
        <Setter 
         TargetName="TopTick" 
         Property="Visibility" 
         Value="Visible" /> 
       </Trigger> 
       <Trigger 
        Property="TickPlacement" 
        Value="BottomRight"> 
        <Setter 
         TargetName="BottomTick" 
         Property="Visibility" 
         Value="Visible" /> 
       </Trigger> 
       <Trigger 
        Property="TickPlacement" 
        Value="Both"> 
        <Setter 
         TargetName="TopTick" 
         Property="Visibility" 
         Value="Visible" /> 
        <Setter 
         TargetName="BottomTick" 
         Property="Visibility" 
         Value="Visible" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
संबंधित मुद्दे